home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / PROGTOOL / LIB211.ZIP;1 / INDEX.TXT < prev    next >
Encoding:
Text File  |  1993-12-21  |  101.2 KB  |  1,848 lines

  1. ========================================================================
  2. INDEX.TXT -- a Listing of all Procedures and UDFS contained in
  3.                             LIB211.ZIP. 
  4.  
  5. Updated: 12/22/1993
  6. ========================================================================
  7.  
  8. ========================================================================
  9. PROC.PRG -- The MAIN PROCEDURE File
  10. ========================================================================
  11.  
  12. ----------------------------------
  13. MESSAGE/SCREEN PROCESSING ROUTINES
  14. ----------------------------------
  15. PrintErr    -- used to display a "standard" error message for printer 
  16.                errors (is it on, online, out of paper?).
  17.                Usage: do PrintErr
  18. Open_Screen -- Used to add texture to the background for an opening 
  19.                screen or menu.
  20.                Usage: do Open_Screen
  21. NewBack     -- Gives a different texture to the background. Flashy, 
  22.                works with screens up to 50 lines (VGA50).
  23.                Usage: do NewBack
  24. JazClear    -- Performs a nice center to edge of screen clear (using a 
  25.                box) ...
  26.                Usage: do JazClear
  27. Wipe        -- performs a left-to-right wipe of a window. Nice effect.
  28.                Usage: do Wipe with <nULRow>,<nULCol>,<nBRRow>,<nBRCol>
  29. Center      -- used to center text anywhere on the screen (optional 
  30.                colors).
  31.                Usage: do Center with <nRow>,<nWidth>,"<cColors>",;
  32.                                      "<cText>"
  33. ProgBar     -- Monitor program activity, so user does not get worried 
  34.                that the machine went into limbo. A graphic version of 
  35.                what the "MONITOR" procedure in SCREEN.PRG does.
  36.                Usage: Do ProgBar with <nQuan>,"<cWindCol>",;
  37.                                 "<cFillCol1>","<cFillCol2>",;
  38.                                 "<cMessage>",<nWindWidth>
  39. Shadow      -- Used for windows/boxes to display a shadow, giving 3-D
  40.                effect.
  41.                Usage: do Shadow with <nULRow>,<nULCol>,<nBRRow>,<nBRCol>
  42. VPick()     -- Multiple-item Picklist -- this routine will allow you to
  43.                create a simple vertical picklist of items, returning the
  44.                first letter of the option selected, or a null string if 
  45.                the user pressed <Esc>.
  46.                Usage: VPick(<nRow>,<nCol>,"<~Option1~Option2~Option3>",;
  47.                              "<cTitle>","<cMessage>",<lShadow>,<cColor>)
  48. HPick()     -- Very much like VPICK() above, but does a Horizontal 
  49.                Picklist.
  50.                Usage: HPick(<nRow>,<nCol>,"<~Option1~Option2~Option3>",;
  51.                              "<cTitle>","<cMessage>",<lShadow>,<cColor>)
  52. ScrnHead()  -- Screen header -- gives three-D border-like effects.
  53.                Usage: ScrnHead(<cColor>,<cText>[,<nStyle>])
  54. Surround()  -- Will display text centered on the screen, surrounded by a
  55.                border (3-D). Giving a default of 0 will center top to 
  56.                bottom as well as left to right (automatic).
  57.                Usage: Surround(<nRow>,<cColor>,<cText>[,<nStyle>])
  58. Alert()     -- Gives an alert dialog box on the screen, with an "OK" 
  59.                button at the bottom. Three-D in effect. Message may be 
  60.                up to 254 characters. Defaults to border style 1, color 
  61.                defaults to grey.
  62.                Usage: Alert(<cTitle>,<cMessage>,<cColors>[,<nStyle>])
  63. ErrorMsg()  -- Used to display an error, similar to Alert, but the title
  64.                will display the word "ERROR", followed by an optional 
  65.                number.
  66.                Usage: ErrorMsg(<cError#>,<cMessage>,<cColor>[,<nStyle>])
  67. YesNo()     -- Yes/No dialog box -- has two buttons at bottom of the 
  68.                box. Text can be up to 254 characters for message.
  69.                Color defaults to grey, border defaults to style 1.
  70.                Usage: YesNo(<lDefault>,<cWhere>,<cTitle>,<cMessage>,;
  71.                               <cColor>[,<nStyle>])
  72. Bord3D      -- 3-D Border routine, requires four corner coordinates,
  73.                color, and style. 
  74.                Usage: Do Bord3d with <nTop>,<nLeft>,<nBottom>,<nRight>,;
  75.                                      <cColor>,<nStyle>
  76. YNC()       -- Yes/No/Cancel dialog box, much as YesNo() above, but with
  77.                three buttons. Due to differences, parameter passed and
  78.                return value are character, rather than logical.
  79.                Usage: YNC(<cDefault>,<cWhere>,<cTitle>,<cMessage>,;
  80.                           <cColor>[,<nStyle>])
  81.  
  82. -------------------------
  83. COLOR PROCESSING ROUTINES
  84. -------------------------
  85. SetColor    -- Sets colors to contents of a memvar to handle various 
  86.                parts of the screen. 
  87.                Usage: do SetColor with <cColorVar>
  88. ReColor     -- Restores colors to those held in a string of the form
  89.                returned by SET("ATTRIBUTE").
  90.                Usage: Do ReColor with <cColors>
  91. ColorBrk()  -- Returns one of three portions of a color variable as used
  92.                in many of my own routines (YESNO, etc.). Used for 
  93.                explicitly setting colors.
  94.                Usage: ColorBrk(<cColorVar>,<nField>)
  95. FBClrBrk()  -- Returns either the foreground or the background (FB) of a
  96.                color memory variable or string.
  97.                Usage: FBClrBrk(<cType>,<cColorVar>)
  98. BackColor() -- Same, from COLOR.PRG for use with all 3-d Dialog/screen 
  99.                routines.
  100.  
  101. ----------------------------
  102. STRING MANIPULATION ROUTINES
  103. ----------------------------
  104. AllTrim()   -- Trims both sides of a character field/memvar.
  105.                Usage: AllTrim(<cString>)
  106. Justify()   -- This is moved here for use in other routines from
  107.                STRINGS.PRG.
  108.                Usage: Justify(<cString>,<nWidth>,<cType>)
  109. State()     -- This is used for validation of a STATE (two letter) code  
  110.                (returns .t. or .f.) -- useful for data entry.
  111.                Usage: State(<cState>)
  112. WordWrap()  -- Routine copied here from STRINGS.PRG for use with YesNo5
  113.  
  114. ----------------------
  115. DATE HANDLING ROUTINES
  116. ----------------------
  117. DateText()  -- Convert date to Month Day, Year format.
  118.                Usage: DateText(<dDate>)
  119. DateText2() -- As above, adds day of week (DoW, Month Day, Year).
  120.                Usage: DateText2(<dDate>)
  121. Age()       -- Returns the age of someone as of DATE(), given their
  122.                birthdate.
  123.                Usage: Age(<dDate>)
  124.  
  125. --------------
  126. MISC. ROUTINES
  127. --------------
  128. SetPrint    -- Used to setup the printer memory variables for a print 
  129.                job.
  130.                Usage: do SetPrint
  131. DosRun()    -- Used to execute a DOS command/program from inside dBASE,
  132.                handles windows and such by restoring them when done.
  133.                Usage: DosRun(<cCmd>)
  134. ScrnRpt()   -- Shows a dBASE Report on screen, and pauses when the 
  135.                screen is full.
  136.                Usage: ScrnRpt(<cRpt>)
  137. SetMouse    -- NEWNEWNEWNEW -- Version 2.0 specific. Used to toggle 
  138.                mouse on/off handy with ON KEY definition. Requires 
  139.                public memvar c_Mouse (will create if not already there).
  140.                Usage: Do SetMouse
  141. SwitchLib() -- Changes the current library file to another. Useful when
  142.                doing quick changes to execute a function/file in another
  143.                library.
  144.                Usage: SwitchLib(<cNewLib>)
  145. VerLevel()  -- Used to return numeric value of current version of dBASE 
  146.                or RUNTIME. Useful with those version specific routines.
  147.                Usage: VerLevel()
  148.  
  149. ========================================================================
  150. LIBRARY FILES
  151. ========================================================================
  152. The following files are the 'library' files that contain all routines in
  153. this system not contained in PROC.PRG. Please notice that some
  154. functions which are used in specific LIBRARY files (such as 
  155. NAVIGATE.PRG, which uses some of the functions in TRIG.PRG) are 
  156. duplicated in some of the other library files. This was done to make 
  157. life easier on the programmer. Since dBASE IV, 1.5 (and later) does not
  158. allow multiple library files (although one can hope for such a feature 
  159. in future editions), we are stuck having to duplicate some routines.
  160.  
  161. ------------------------------------------------------------------------
  162. SCREEN.PRG -- Screen Handling
  163. ------------------------------------------------------------------------
  164. Radio()     -- This routine creates a "radio-button" routine. You can 
  165.                have up to four options. Returns # of item chosen ...
  166.                Usage: Radio(<nULRow>,<nULCol>,<nChoice>,"<cTxt1>",;
  167.                             "<cTxt2>","<cTxt3>","<cTxt4>","<cTitle>",;
  168.                             "<cColor>")
  169. CheckBox    -- This routine does a "CheckBox" much like Windows/Mac type
  170.                software, with up to four options. NOTE -- the items 
  171.                marked in the format must be a) logical, and b) fields/
  172.                memvars.
  173.                Usage: Do CheckBox with <nULRow>,<nULCol>,<cTitle>,;
  174.                                <cColor>,<lChk1>,<cTxt1>[,<lChk2>,;
  175.                                <cTxt2>][,<lChk3>,<cTxt3>] ... to 9
  176. MenuPad()   -- Used to define menu pad and popup bars as a specific 
  177.                length. Function will truncate if longer than needed, 
  178.                and will pad with spaces otherwise.
  179.                Usage: MenuPad("<nChoice>",<nLength>)
  180. Banner()    -- Used to display a scrolling "banner" message on the 
  181.                screen. 
  182.                Usage: Banner(<nRow>,<nCol>,<nwidth>,"<cMessage>",;
  183.                              "<cColor>")
  184. SeeMatch()  -- Displays instant lookup match on a field in a shadowed 
  185.                box.
  186.                Usage: SeeMatch("<cFile>",<cSeekExp>,"<cReturn>",;
  187.                           <nULRow>,<nULCol>,<nBRRow>,<nBRCol>,;
  188.                          "<cColor>")
  189. MsgExp()    -- Used to display a message (or an error message), 
  190.                centered on the screen. Does not use the "(Press Space)"
  191.                bits that dBASE uses on an error message ... The message
  192.                and the line on which it is displayed will be the same 
  193.                color.
  194.                Usage: MsgExp("<cExp>")
  195. ProgBar2    -- Same as PROGBAR in PROC.PRG, but a bit simpler to use.
  196.                Usage: Do ProgBar2 with <nQuan>,"<cWindCol>",;
  197.                                        "<cFillCol2>","<cFillCol2>"
  198. MovePad     -- Moves menu pad on selection of a letter. 
  199.                Usage: Do MenuPad with <cLetter>,<lSelect>,<cChoices>
  200. Monitor     -- Displays a box, showing total records in database -- is
  201.                designed to be used in a system that does a record-by-
  202.                record update, so the user knows something is happening. 
  203.                You need to add code to display actual record numbers as 
  204.                the task is happening.
  205.                Usage: do Monitor with "<cText>","<cColors>"
  206. Monitoroff  -- Cleanup for Monitor procedure above.
  207.                Usage: do MonitorOff
  208. NewBorder() -- This can be used to change your current border setting to
  209.                one of a set of pre-defined borders. It will also set a
  210.                public memvar c_Border to the same border setup string, 
  211.                and returns the 'current' border string.
  212.                Usage: NewBorder("<cStyle>")
  213. VidRow()    -- Returns the absolute row coordinate on a screen, ignoring
  214.                active windows (which can be frustrating at times).
  215.                REQUIRES: VDCURSOR.BIN
  216.                Usage: VidRow()
  217. VidCol()    -- Returns the absolute column coordinate on a screen, 
  218.                ignoring active windows ...
  219.                REQUIRES: VDCURSOR.BIN
  220.                Usage: VidCol()
  221. PwdMask()   -- Used to obtain a password from a user, with a programmer 
  222.                defineable mask character (default is asterisk). REQUIRES 
  223.                VDCURSOR.BIN
  224.                Usage: PwdMask(<cField>[,<nMaskChar>])
  225. MultiPick   -- Used for a checkbox routine, using a two-column array.
  226.                REQUIRES: JPMOUSE.BIN,MUSCLICK.BIN,VDCURSOR.BIN
  227.                Usage: do MultiPick with <cArray>,<nDown>,<nLast>,;
  228.                                    <nRows>,<nLength>[,<cColors>;
  229.                                    [,<cCheck>]]
  230. SMultPick   -- Subroutine of MultiPick -- used to handle a display loop.
  231.                Usage: doSMultPick
  232. YesQuit()   -- Subroutine for MultiPick. 
  233.                Usage: YesQuit()
  234. YNMouse()   -- Mouseable Yes/No Dialog Box. REQUIRES MUSCLICK.BIN
  235.                Usage: YnMouse(<cColors>,<cP1>[,<cP2>...][,<lYes>])
  236. CWnSize()   -- Returns a string of four characters (chr() values) +1 for
  237.                the coordinates of the current window/screen. 
  238.                REQUIRES: VDCURSOR.BIN
  239.                Usage: cWnSize()
  240. nWBSrch()   -- Subroutine for cWnSize() above.
  241. CWnDecode() -- Used to return numeric values based on CWNSIZE() above.
  242.                Usage: cWnDecode(<cWnString>,<cEdge>|<nPos>)
  243. SetBorder   -- Brings up a picklist and sample of possible borders from
  244.                routine NEWBORDER() above. Allows user to select borders
  245.                for use in routines. Escaping or using left/right arrows
  246.                returns to original border selection (from before calling
  247.                routine). NOTE: THIS WILL ONLY WORK IN dBASE IV, 2.0 (or 
  248.                later), due to use of ON POPUP command ...
  249.                Usage: Do SetBorder with <cColor>
  250. DrawIt      -- Routine used with SetBorder to draw sample area in window
  251.                Usage: Do DrawIt
  252. Wait4Key()  -- Used to deal with a read-timeout. Wait for <nSeconds>, if
  253.                no keypress, abort the read.
  254.                Usage: @... get <field> when Wait4Key(<nSeconds>)
  255. JazFill     -- Used to clear out/redisplay a section of the screen with 
  256.                chr(176) in a specific set of colors (there are three
  257.                options). Useful for backgrounds for popups/picklists and
  258.                things.
  259.                Usage: do JazFill with <nBegRow>,<nBegCol>,<nEndRow>,;
  260.                                       <nEndCol>,<nSpeed>,<nColoSet>
  261. NewBack     -- Creates a textured background different from the one in
  262.                PROC.PRG, in that it uses three characters (ascii 176,177
  263.                and 178) to do this. It's pretty fast.
  264.                Usage: Do NewBack
  265. Warning()   -- Displays a message at the bottom of the screen.
  266.                WARNING: Clears out bottom of your screen, suggest
  267.                using SAVE/RESTORE SCREEN.
  268.                Usage: Warning(<cMsg1>[,<cMsg2>[,<cMsg3>[,<cMsg4>;
  269.                              [,<cMsg5>]]]])
  270. Frame()     -- Accepts up to three lines of text and displays in a
  271.                double-line border on screen.
  272.                Usage: Frame(<nBegRow>,<nBegCol>,<nEndRow>,<nEndCol>,;
  273.                             <cText1>,<cText2>,<cText3>,<cColor>,;
  274.                             <lCenter>)
  275. Shade()     -- A shadow routine. 
  276.                Usage: Shade(<nBegRow>,<nBegCol>,<nEndRow>,<nEndCol>)
  277. BurstWin()  -- Creates an exploding pseudo-window, with ASCII 177
  278.                as a textured-background.
  279.                Usage: BurstWin(<nBeginRow>,<nBeginCol>,<nEndRow>,;
  280.                          <nEndCol>,<nStep>,<cColor>)
  281.  
  282. ------------------------------------------------------------------------
  283. COLOR.PRG -- Color Processing
  284. ------------------------------------------------------------------------
  285. AttriByte() -- Returns the attribute byte of a dBASE Color code.
  286.                Usage: AttriByte("<cCode>")
  287. ColorName() -- Converts an attribute value for an area to the name of 
  288.                the corresponding color combination. 
  289.                Usage: ColorName(<nAttr>)
  290. ColorCode() -- Given a color attribute byte, returns dBASE color code.
  291.                Usage: ColorCode(<nAttr>)
  292. ColorOf()   -- Returns the color of attributes in dBASE, as currently 
  293.                set.
  294.                Usage: ColorOf("<cArea>")
  295. NormColors()-- Returns the 'normal' portion of a color string.
  296.                Usage: NormColors(<cColor>)
  297. HighColors()-- Returns the 'highlight' portion of a color string.
  298.                Usage: HighColors(<cColor>)
  299. BordColors()-- Returns the 'border' portion of a color string.
  300.                Usage: BordColors(<cColor>)
  301. OppColor()  -- Returns a color string contrasting nicely with the one
  302.                given as a parameter. Basically inverts the color passed
  303.                to it.
  304.                Usage: OppColor(<cColor>)
  305. ForeColor() -- Returns foreground part of color string.
  306.                Usage: ForeColor(<cColor>)
  307. BackColor() -- Returns background part of color string.
  308.                Usage: BackColor(<cColor>)
  309. Bright()    -- Converts a dBASE Color Attribute to a bright (+) 
  310.                foreground.
  311.                Usage: Bright(<cAttrib>)
  312. Dim()       -- Converts a bright dBASE Color Attribute to it's
  313.                non-bright (no +) foreground.
  314.                Usage: Dim(<cAttrib>)
  315. Blink()     -- Converts a dBASE Color Attribute to a blinking (*)
  316.                foreground.
  317.                Usage: Blink(<cAttrib>)
  318. NoBlink()   -- Removes blinking foreground from a dBASE Color
  319.                attribute.
  320.                Usage: NoBlink(<cAttrib>)
  321.  
  322. ------------------------------------------------------------------------
  323. STRINGS.PRG -- Character String Processing
  324. ------------------------------------------------------------------------
  325. Proper()    -- Converts text to "proper" case (upper/lower case, handles
  326.                contractions, Mc, Mac, etc.). Useful for names (converts
  327.                first letter to upper case, the rest to lower, except as
  328.                above).
  329.                Usage: Proper("<cArg>")
  330. Dots()      -- Used to pad a field with dots (dot leader, trailer ...) 
  331.                Usage: Dots(<cFld>,<nLength>,"<cType>")
  332.                       cType must be L (left), C (center), or R (right)
  333. CutPaste()  -- Used to Cut a string and Paste another in it's place. 
  334.                It's an easier way to use the STUFF() function.
  335.                Usage: CutPaste(<cFld>,<cLookFor>,<cRepWith>)
  336. LastWord()  -- Used to return the last "word" of a string of characters
  337.               (words being bracketed by spaces).
  338.                Usage: LastWord(<cString>)
  339. VStretch()  -- Displays a long character field (254 char) on screen, 
  340.                with wrap-around, and handles proper word-breaks - you 
  341.                give dimensions for where you want it displayed (window).
  342.                Usage: VStretch(<cFld>,<nULRow>,<nULCol>,<nBRRow>,;
  343.                             <nBRCol>)
  344. AtCount()   -- Returns the number of times a string is found in another.
  345.                Usage: AtCount(<cFindStr>,<cBigStr>)
  346. IsAlNum()   -- If first character of string is alphabetic or digit, 
  347.                returns .t., otherwise returns .f..
  348.                Usage: IsAlNum(<cChar>)
  349. IsAscii()   -- If first character is in ASCII (normal, not extended)
  350.                character set, returns .t., otherwise returns .f..
  351.                Usage: IsAscii(<cChar>)
  352. IsCntrl()   -- If first character is a delete or control character, 
  353.                returns .t., otherwise returns .f..
  354.                Usage: IsCntrl(<cChar>)
  355. IsDigit()   -- If first character is a digit, returns .t..
  356.                Usage: IsDigit(<cChar>)
  357. IsPrint()   -- If first character is a printing character (space through
  358.                chr(126), returns .t..
  359.                Usage: IsPrint(<cChar>)
  360. IsXDigit()  -- If first character is possible hexadecimal digit, returns
  361.                .t..
  362.                Usage: IsXDigit(<cChar>)
  363. IsSpace()   -- Returns .t. if first character is space, tab, carriage
  364.                return, line feed, vertical tab, or formfeed.
  365.                Usage: IsSpace(<cChar>)
  366. Name2Label()-- Returns a name held in five fields as a single field for 
  367.                the purpose of printing in a label.
  368.                Usage: Name2Label(<nLength>,<cPrefix>,<cFirstName>,;
  369.                                  <cMidName>,<cLastName>,<cSuffix>)
  370. StrpBrk()   -- Search string for first occurrence of any specific
  371.                character(s).
  372.                Usage: StrpBrk(<cCharSet>,<cBigStr>)
  373. StrRev()    -- Reverse a string.
  374.                Usage: StrRev(<cAnyStr>)
  375. Strip2Val() -- Strip characters from the left until reaching one that 
  376.                might begin a numeric value ...
  377.                Usage: Strip2Val(<cString>)
  378. StripVal()  -- Strip characters until reaching one that is NOT part of a
  379.                number.
  380.                Usage: StripVal(<cString>)
  381. ParseWord() -- Finds first word in a character string.
  382.                Usage: ParseWord(<cW>)
  383. StripWord() -- Removes first word in character string.
  384.                Usage: StripWord(<cW>)
  385. Plural()    -- Returns the "plural" of a noun. This will fit most cases,
  386.                but not all, as English has too many exceptions. 
  387.                Usage: Plural(<nItems>,"<cNoun>")
  388. StrComp()   -- Compares the contents of two strings.
  389.                Usage: StrComp(<cStr1>,<cStr2>)
  390. StrOccur()  -- Calculates the number of occurences of a string in 
  391.                another, works for character memvar/field, and memo 
  392.                fields.
  393.                Usage: StrOccur(<cInString>,<cFindString>)
  394. NumOccur()  -- Calculates the number of occurences of a string in 
  395.                another.
  396.                Usage: NumOccur(<cInString>,<cFindString>)
  397. ReplMemo()  -- Globally searches and replaces a string with another 
  398.                string in a character field/memvar or memo field.
  399.                Usage: ReplMemo(<cSource>,<cCurrStr>,<cNewStr>)
  400. MemStuff()  -- Replaces a specific string in a character string, by 
  401.                another.
  402.                Returns the resultant string.
  403.                Usage: MemStuff(<cSource>,<cCurrStr>,<cNewStr>)
  404. Stub()      -- Returns a specific number of characters from a given 
  405.                string, adding characters in cIn to the end of it.
  406.                Usage: Stub(<cString>,<nIn>,<cIn>)
  407. FirstMem()  -- Capitalizes the first character of all the words in the
  408.                string passed as a parameter, returns resultant string
  409.                (unless a memo, in which case, returns a .T.)
  410.                Usage: FirstMem(<cInStr>)
  411. FirstCap()  -- Capitalizes the first character of a string.
  412.                Usage: FirstCap(<cInString>)
  413. StripND()   -- Strips non-digit characters from a character string,
  414.                returning a string containing only digits.
  415.                Usage: StripND(<cNumArg>)
  416. Strip()     -- Strips each occurance of the passed string of one or
  417.                more characters from a character string.
  418.                Usage: Strip(<cVar>,<cArg>)
  419. WordWrap    -- A routine to handle wrapping text within a specified 
  420.                width.
  421.                Usage: do WordWrap with <nRow>,<nCol>,<cText>,<nWidth>
  422. BreakName() -- This returns a specified part of a name, such as the
  423.                last name, of a name originally held in a single string.
  424.                Usage: BreakName(<cName>[,<cPart>])
  425. NamePart()  -- Guesses a portion of a name, based on <cPart>. Used with 
  426.                BreakName() above. 
  427.                Usage: NamePart(<cName>,<cPart>)
  428. NameMark()  -- Guesses portion of a name, based on <cPart>. Used with
  429.                MarkLine().
  430.                Usage: NameMark(<cName>,<cPart>,<cEnd>)
  431. MarkLine()  -- Presents a string with the cursor at a given position in 
  432.                the string. Allows user to move cursor to a new position 
  433.                in the string.
  434.                Usage: MarkLine(<cLine>[,<nPos>])
  435. DeCode()    -- Decodes a string encoded with EnCode() below. Used for
  436.                simple password protection.
  437.                Usage: DeCode(<cInput>)
  438. EnCode()    -- Encodes a string, can be decoded with DeCode() above. 
  439.                Used for simple password protection.
  440.                Usage: EnCode(<cInput>)
  441. ExEqual()   -- EXactly Equal. Used to test two memvars for an exact 
  442.                match.
  443.                Usage: ExEqual(<cInput1>,<cInput2>)
  444. Str_Edit()  -- Used to strip unwanted characters from an input string.
  445.                Usage: Str_Edit(<cInput>,<cBadChars>)
  446. CapFirst()  -- Used to capitalize the the first letter of words,
  447.                with "some intelligence" as the author puts it.
  448.                Usage: CapFirst(<cInString>)
  449.  
  450. ------------------------------------------------------------------------
  451. CONVERT.PRG -- Numeric Conversions/calculations
  452. ------------------------------------------------------------------------
  453. Roman()     -- Function to return a Roman Numeral based on input of an
  454.                Arabic.
  455.                Usage: Roman(<nArabic>)
  456. Arabic()    -- Opposite of Roman (takes Roman Numeral provided, returns
  457.                Arabic).
  458.                Usage: Arabic("<cRoman>")
  459. Factorial() -- Does what it sounds like, it returns the factorial of a
  460.                value.
  461.                Usage: Factorial(<nNumber>)
  462. IsPrime()   -- Determines if the argument passed is a prime positive         
  463.                integer.
  464.                Usage: IsPrime(<nNumber>)
  465. BankRound() -- Rounds numeric argument to given # of places using 
  466.                "Banker's rule."
  467.                Usage: BankRound(<nNumber>,<nPlaces>)
  468. Num2Str()   -- Number to String. 
  469.                Usage: Num2Str(<nNumber>)
  470. Dec2Hex()   -- Decimal to Hexadecimal conversion.
  471.                Usage: Dec2Hex(<nDecimal>)
  472. Hex2Dec()   -- Hexadecimal to Decimal conversion.
  473.                Usage: Hex2Dec(<cHex>)
  474. Hex2Bin()   -- Hexadecimal to Binary conversion.
  475.                Usage: Hex2Bin(<cHex>)
  476. Bin2Hex()   -- Binary to Hexadecimal conversion.
  477.                Usage: Bin2Hex(<cBin>)
  478. Dec2Oct()   -- Decimal to Octal conversion.
  479.                Usage: Dec2Oct(<nDec>)
  480. Oct2Dec()   -- Octal to Decimal conversion.
  481.                Usage: Oct2Dec(<xOct>)
  482. Cash2Check()-- Converts a number of dollars and cents to a string of 
  483.                words.
  484.                Usage: Cash2Check(<nCash>)
  485. Num2Words() -- Converts an integer to a string of words.
  486.                Usage: Num2Words(<nNum>)
  487. Thou2Words()-- Converts a positive integer less than 1000 to a string of
  488.                words.
  489.                Usage: Thou2Words(<nNum>)
  490. Ord()       -- Converts an integer to ordinal representation.
  491.                Usage: Ord(<nNum>)
  492. Num2Word()  -- Converts an integer to a string of words -- self-
  493.                contained function, does not call other functions. 
  494.                Usage: Num2Word(<nValue>)
  495. Num2Real()  -- Converts a number to the ASCII representation of its 
  496.                storage in IEEE 8-byte real format.
  497.                Usage: Num2Real(<nNum>,<nExp>)
  498. Dec2Bin()   -- Decimal to Binary conversion.
  499.                Usage: Dec2Bin(<nNum>,<nPlaces>)
  500. Frac2Bin()  -- Converts the fractional part of a decimal number to a
  501.                character string giving its ASCII binary representation.
  502.                Usage: Frac2Bin(<nNum>,<nPlaces>)
  503. Bin2Dec()   -- Converts a string containing a binary value to its 
  504.                numeric (decimal) equivalent.
  505.                Usage: Bin2Dec(<cStr>)
  506. Dec2Mkd()   -- Converts numeric to eight chr() values in array. (Roughly
  507.                equivalent to MDK$() in BASIC)
  508.                Usage: Dec2Mkd(<nVar>,<cName>)
  509. Dec2Mki()   -- Converts an integer in range -32,768 to +32,767 to two 
  510.                chr() values equivalent to the two bytes created by the 
  511.                BASIC MKI$().
  512.                Usage: Dec2Mki(<nInt>,<cName>)
  513. Dec2Mkl()   -- Converts integer to four chr() values in array. 
  514.                Equivalent to MKL$() in BASIC.
  515.                Usage: Dec2Mkl(<nInt>,<cName>)
  516. Dec2Mks()   -- Converts numeric value to four chr() values in array.
  517.                Equivalent to MKS$() in BASIC.
  518.                Usage: Dec2Mks(<nVar>,<cName>)
  519. Dec2MSks()  -- Convert numeric to four CHR() values in array. Uses 
  520.                obsolete MicroSoft format. 
  521.                Usage: Dec2MSks(<nVar>,<cName>)
  522. Mkd2Dec()   -- Convert eight bytes storing an IEEE long real value 
  523.                (similar to CVD() function in BASIC)
  524.                Usage: Mkd2Dec(<c1>,...,<c8>)
  525. Mki2Dec()   -- Convert two bytes storing a signed short integer to 
  526.                decimal equivalent. Similar to CVI() in BASIC.
  527.                Usage: Mki2Dec(<c1>,<c2>)
  528. Mkl2Dec()   -- Convert four bytes storing a signed long integer. 
  529.                Similar to CVL() in BASIC.
  530.                Usage: Mkl2Dec(<c1>,<c2>,<c3>,<c4>)
  531. Mks2Dec()   -- Converts four bytes storing an IEEE Short real value. 
  532.                Similar to CVS() in BASIC.
  533.                Usage: Mks2Dec(<c1>,<c2>,<c3>,<c4>)
  534. MSks2Dec()  -- Converts four bytes storing an old-style Microsoft short 
  535.                real value to decimal. Similar to CVS() in BASIC.
  536.                Usage: MSks2Dec(<c1>,<c2>,<c3>,<c4>)
  537. Ordinal()   -- Returns an ordinal string for a positive integer < 100. 
  538.                For values greater than this, use Num2Words(), and use 
  539.                this for the values < 100.
  540.                Usage: Ordinal(<nNum>)
  541.  
  542. ------------------------------------------------------------------------
  543. DATES.PRG -- Date Handling Routines
  544. ------------------------------------------------------------------------
  545. DateText3() -- As DateText() and DateText2() in PROC.PRG, returns: 
  546.                Month, Year.
  547.                Usage: DateText3(<dDate>)
  548. Age2()      -- Returns the whole number of years between two dates.
  549.                Usage: Age2(<dDate>,<dEvent>)
  550. DoY()       -- Day of Year -- returns "Julian" date (US Government 
  551.                version ...) -- this is the number of days a date is into
  552.                the year (i.e., 11/14/91 = 318).
  553.                Usage: DoY(<dDate>)
  554. Annivrsry() -- Checks to see if a birthday or other specific 
  555.                "anniversary" is within a range of dates.
  556.                Usage: Annivrsry(<dTest>,<dBegin>,<dEnd>)
  557. AddMonths() -- Returns the exact date 'N' months from given date.
  558.                Usage: AddMonths(<dDate>,<nMonths>)
  559. AddYears()  -- Returns the exact date 'N' Years from given date.
  560.                Usage: AddYears(<dDate>,<nYears>)
  561. WeekNo()    -- Returns the week number of the date (there are 52 weeks a
  562.                year, right?).              
  563.                Usage: WeekNo(<dDate>)
  564. EasterDay() -- This returns the day of Easter. 
  565.                Usage: EasterDay(<nYear>) && nYear = YYYY format
  566. nDoW()      -- Numeric Day of Week -- used to return the numeric value 
  567.                of a character day of the week, useful for some of the 
  568.                revised functions below.
  569.                Usage: nDoW(<cDay>)
  570. FWDoM()     -- First Working Day Of the Month -- this returns the first
  571.                working day of the month passed to the function.
  572.                Usage: FWDoM(<dDate>)
  573. LWDoM()     -- Last Working Day Of the Month --  returns the last 
  574.                working day of the month passed to the function.
  575.                Usage: LWDoM(<dDate>)
  576. FDoD()      -- First Day of Date -- this returns the first occurrence of
  577.                a given day of the week within a month. For example, you 
  578.                might need the first Monday of the month. 
  579.                Usage: FDoD(<dDate>,"<cDay>")  (cDay = Monday, Tuesday, 
  580.                                                etc.)
  581. LDoD()      -- Last Day of Date -- This returns the last occurrence of a
  582.                given day of the week within a month. For example, you 
  583.                might need the last Monday in a month.
  584.                Usage: LDoD(<dDate>,"<cDay>")
  585. LDoM()      -- Last Day of Month -- this returns the last day of the 
  586.                month as a date. It's used in LDoD and LWDoM above.
  587.                Usage: LDoM(<dDate>)
  588. NumDoD()    -- Number of Day of Date -- this returns a specific 
  589.                occurrence of a given day of the week within a month. 
  590.                For example, you might need the 3rd Tuesday of the month.
  591.                Usage: NumDoD(<dDate>,<nDay>,"<cDay>")
  592. WDIF()      -- Work Days In the Future -- this is used to return the 
  593.                date based on a number of work-days from another date. 
  594.                For example, you could find the date of the 10th work 
  595.                date from today (date()) by using date(),10 as the 
  596.                parameters in the format below. This function can use a 
  597.                HOLIDAYS database to be more accurate, but you must 
  598.                create it in a specific format (see complete function 
  599.                documentation in the file DATES.PRG).
  600.                Usage: WDiF(<dStart>,nWDays)
  601. StoD()      -- String to Date -- this returns a "normal" dBASE date from
  602.                a character string containing formats of YYYYMMDD or 
  603.                YYMMDD.
  604.                Usage: StoD("<cString>")
  605. Quarter()   -- This function returns the "Quarter" of the year that a
  606.                specified date is in ...
  607.                Usage: Quarter(<dDate>)
  608. Dat2Jul()   -- Convert dBASE date to Julian date
  609.                Usage: Dat2Jul(<dDate>)
  610. Jul2Dat()   -- Convert Julian date to dBASE date
  611.                Usage: Jul2Dat(<nJulian>)
  612. FrstNxtMth()-- Returns the first day of next month, given a date in
  613.                'current' month.
  614.                Usage: FrstNxtMth(<dDate>)
  615. FDoM()      -- Returns the first day of the month a specific date is in.
  616.                Usage: FDoM(<dArg>)
  617. FDoY()      -- Returns first day of year (January 1) that a specific 
  618.                date is in.
  619.                Usage: FDoY(<dArg>)
  620. LDoY()      -- Returns last day of year (December 31) that a specific 
  621.                date is in. 
  622.                Usage: LDoY(<dArg>)
  623. QDate()     -- Allows user to enter date as if using Intuit's Quicken. 
  624.                Used with WHEN clause ...
  625.                Usage: @x,y GET <dArg> WHEN QDate(<dArg>)
  626.                Keys: T    = Today's Date
  627.                      -/_  = Day before
  628.                      +/=  = Day after
  629.                      M    = First day of month
  630.                      H    = Last day of month
  631.                      Y    = First day of year
  632.                      R    = Last day of year
  633.                      digit = manual entry
  634. HebrewDate()-- Converts a date to corresponding date on the Hebrew 
  635.                Calendar. The date returned is the Hebrew date that 
  636.                matches the daylight hours of the given civil date; the 
  637.                Hebrew date actually starts the evening before.
  638.                Usage: HebrewDate(<dDate>)
  639. CivilDate() -- Converts a Hebrew calendar date to corresponding date on 
  640.                the civil calendar.
  641.                Usage: CivilDate(<cDate>)
  642. Date2Heb()  -- Used in HebrewDate() above, to perform the actual 
  643.                conversion.
  644.                Usage: Date2Heb(<dDate>)
  645. Kebiah()    -- Kebiah of a year, using Arthur Spier's Notation. Tells
  646.                whether the year in the Hebrew Calendar is defective, 
  647.                regular or excessive and whether or not a leap year.
  648.                Usage: Kebiah(<dRosh1>,<dRosh2>)
  649. Roshashana()-- Returns date of Rosh Hashanah of the given Hebrew Year.
  650.                Usage: Roshashana(<nYear>)
  651. Dechiyoth() -- Adjusts date of Rosh Hashanah for the four dechiyoth
  652.                (postponements) required to regularize the calendar and
  653.                prevent either two days in a row of Sabbath at Yom Kippur
  654.                or Hoshanah Rabbah being on the Sabbath.
  655.                Usage: Dechiyoth(<dDate>,<nHours>,<nChalokim>)
  656. IsLeapH()   -- Determines if an Hebrew year is a leap year.
  657.                Usage: IsLeapH(<nYear>)
  658. NormalH     -- Normalize date and numbers of hours and chalokim.
  659.                Usage: Do NormalH with <dDate>,<nHours>,<nChalokim>
  660. MDY_Udf()   -- This is a variation on MDY() (built-in). It displays 
  661.                dates in a nice format regardless of the Set CENTURY 
  662.                setting.
  663.                Usage: Mdy_udf(<dDate>)
  664. SWorkDays() -- Returns workdays between two dates, excluding the first,
  665.                but including the last.
  666.                This is a shortcut version of WORKDAYS() included here.
  667.                Usage: SWorkDays(<dDate1>,<dDate2>)
  668. WeekDays()  -- Returns the number of days that are not Saturdays or
  669.                Sundays within a range of dates. Excludes beginning date
  670.                and includes ending date. Range must be less than one 
  671.                year. This does not include holidays.
  672.                Usage: WeekDays(<dDate1>,<dDate2>)
  673. XWorked()   -- Returns number of workdays in a stub period of 0-6 days
  674.                beginning on the day of the week indicated. Does not
  675.                consider holidays, treats workdays as Monday thru Friday.
  676.                Usage: xWorked(<nxtra>,<nDow>)
  677. HoliCount() -- Returns number of holidays that fall in the portion of
  678.                a calendar year ending with a given date. Always includes
  679.                New Year's Day, transferred to the 2nd or 3rd, and July 4 
  680.                and XMas, each transferred if required to the nearest
  681.                day not Saturday or Sunday. Other holidays are
  682.                included (but not transferred) if their codes for the 
  683.                Holiday() function are included in the cHols argument.
  684.                Does not include the numbers of Saturdays/Sundays in the
  685.                value returned.
  686.                Usage: HoliCount(<dDate>,<cHols>)
  687. HolXFer()   -- Returns date of celebration of a holiday. 
  688.                Usage: HolXFer(<dDate>,<cDows>,<cDir>)
  689. WorkDays()  -- Returns workdays between two dates, excluding the first
  690.                but including the last.
  691.                USES: HOLSYYYY.DBF (with YYYY being the year of 
  692.                interest). 
  693.                USES: MAKEHOLS() function. A copy of the MAKEHOLS.DBF 
  694.                is included with dUFLP, as a sample, which may or may 
  695.                not be useful. Read the internal documentation for 
  696.                these routines carefully.
  697.                Usage: WorkDays(<dDate1>,<dDate2>)
  698. MakeHols()  -- Makes a .DBF file of name "HOLSYYYY.DBF", if MAKEHOLS.DBF
  699.                is found, where 'YYYY' in the name will be the four 
  700.                digits of the year. The resulting file contains a record 
  701.                for each non-working day of the year, sorted in order of
  702.                date and tagged by date tag "HolDate". Returns .T. if 
  703.                successful, .F. otherwise. If the file HolsYYYY.DBF 
  704.                already exists, it will be replaced if older than 
  705.                "MAKEHOLS.DBF".
  706.                USES: MAKEHOLS.DBF
  707.                Usage: MakeHols(<nYear>)
  708. AddaHol()   -- Adds a date to HolsYYYY if in correct year and not
  709.                already included.
  710.                USES: HOLSYYYY.DBF (see MakeHols() above)
  711.                Usage: AddaHol(<dDate>,<nYr>,<cHolName>)
  712. Holiday()   -- Returns the date of specific "floating" holidays for a 
  713.                given year, requires a one-letter code. See full doc in 
  714.                DATES.PRG.
  715.                Usage: Holiday(<nYear>,<cCode>)
  716.                Where cCode may be one of the following:
  717.                      P = President's Day
  718.                      D = Daylight Saving Time
  719.                      M = Memorial Day
  720.                      L = Labor Day
  721.                      C = Columbus Day
  722.                      S = Return to "Standard" Time
  723.                      E = Election Day
  724.                      T = Thanksgiving Day
  725.                      A = Advent 1st Sunday
  726. IsLeap()    -- Returns .t./.f. if year is a leap year... (year in YY or 
  727.                YYYY formats)
  728.                Usage: IsLeap(<nYear>)
  729. Num2Date()  -- Converts dates in YYMMDD format to dBASE date format.
  730.                Designed for use with AS/400 dates downloaded to PCs.
  731.                Usage: Num2Date(nYyMmDd)
  732. Epoch()     -- Adjusts a date to within 100 years after a given
  733.                Epoch.
  734.                Usage: Epoch(<dDate>,<xReturn>[,<nEpoch>])
  735.  
  736. ------------------------------------------------------------------------
  737. TIME.PRG Time Processing Routines
  738. ------------------------------------------------------------------------
  739. Delay()     -- Delay loop in seconds.
  740.                Usage: Delay(<nSeconds>)
  741. Time2Sec()  -- Convert time string to seconds.
  742.                Usage: Time2Sec(<cTime>)
  743. Sec2Time()  -- Convert seconds to time string.
  744.                Usage: Sec2Time(<nSeconds>)
  745. DiffTime()  -- Calculate difference btween two time strings.
  746.                Usage: DiffTime(<cTime1>,<cTime2>)
  747. Civ2Mil()   -- Convert civilian time string (i.e., "12:59 A.M.") to 24 
  748.                hour (military) time.
  749.                Usage: Civ2Mil(<cCivilTime>)
  750. Mil2Civ()   -- Convert military (24 hour) time to Civilian time.
  751.                Usage: Mil2Civ(<cMilTime>)
  752. IsAmPm()    -- Checks to see if a time string is in "Civilian" time 
  753.                format (i.e., AM/PM) -- returns a logical (.t./.f.)
  754.                Usage: IsAmPm(<cTime>)
  755. AddTimes()  -- Adds two time-strings together, returning a valid time
  756.                string.
  757.                Usage: AddTimes(<cTime1>,<cTime2>|<nHours>)   
  758.  
  759. ------------------------------------------------------------------------
  760. FINANCE.PRG -- Finance Functions
  761. ------------------------------------------------------------------------
  762. Discount()  -- Compute the present value of an amount received at the 
  763.                end of a number of periods given a periodic interest 
  764.                rate.
  765.                Usage: Discount(<nFuturVal>,<nRate>,<nPeriods>)
  766. FuturVal()  -- Compute the future value of an initial amount at compound
  767.                interest received at a given periodic rate for a number 
  768.                of periods.
  769.                Usage: FuturVal(<nPresVal>,<nRate>,<nPeriods>)
  770. Rate()      -- Compute rate of periodic interest needed to produce a 
  771.                future value from a present value in a given number of 
  772.                periods.
  773.                Usage: Rate(<nFutVal>,<nPresVal>,<nPeriods>)
  774. ContRate()  -- Compute rate if compounding is continuous.
  775.                Usage: ContRate(<nFutVal>,<nPresVal>,<nYears>)
  776. NPV()       -- Net Present Value of array aCashFlow[n].
  777.                Usage: NPV(<nRate>,<nPeriods>)
  778. IRR()       -- Internal Rate of Return, using ZeroIn().
  779.                Usage: Irr(<fX1>,<fX2>,<n_Flag>)
  780. IRR2()      -- Internal Rate of Return, traditional analysis of periodic
  781.                cashflows. Returns periodic rate of return which must be
  782.                analyzed by the user. Uses an iterative process and 
  783.                multiple answers are possible.
  784.                Usage: Irr2(<nN>,<cFlow>,<lSw>,<nGuess>)
  785. FVIrr()     -- Companion to Irr2(). Irr() searches the function for NPV
  786.                for roots, while FVIrr searches the function for NFV.
  787.                Usage: FVIrr(<nN>,<cFlow>,<lSw>,<nGuess>)
  788. MIrr()      -- Modified Internal Rate of Return -- employs a financial
  789.                manager's analysis of the cost of reserve funds and a 
  790.                likely reinvestment rate for receipts. Returns periodic
  791.                rate of return which must be annualized by the user. 
  792.                Solves directly for a unique answer.
  793.                Usage: MIrr(<nN>,<cFlow>,<nRRate>,<nFRate>)
  794. XIrr()      -- Internal Rate of Return not constrained by evenly-spaced
  795.                periods of chasflow, but uses dates of transactions. 
  796.                Returns annulaized rate of return based on daily 
  797.                compounded interest. Iterative process with multiple 
  798.                answers possible.
  799.                Usage: XIrr(<nN>,<cFlow>,<lSw>,<nGuess>)
  800. FVXIrr()    -- Companion to XIrr() with the search for roots of the NFV 
  801.                function. See FVIrr() above.
  802.                Usage: FVXIrr(<nN>,<cFlow>,<lSw>,<nGuess>)
  803. XMIrr()     -- Modified Internal Rate of Return without the constraint 
  804.                of evenly spaced periods, uses dates of transactions and 
  805.                returns annualized rate of return based on daily 
  806.                compounded interest. Solves directly for a unique answer.
  807.                Usage: XMIrr(<nN>,<cFlow>,<nRRate>,<nFRate>)
  808.  
  809. ------------------------------------------------------------------------
  810. ARRAY.PRG -- Array Processing Routines
  811. ------------------------------------------------------------------------
  812. AFill()     -- Fills an array with sequential elements. Useful for 
  813.                testing array processing routines.
  814.                Usage: FillArray(<aArray>,<nArraySize>,<nFirstValue>,;
  815.                                 <nStep>)
  816. AMask()     -- Returns a "mask" specifying the desired row or column of 
  817.                an array.
  818.                Usage: AMask(<cArrayskel>,<cVar>)
  819. AMean()     -- Mean of non-blank numeric or date values in specified 
  820.                row or column of an array.
  821.                Usage: AMean(<cArrayskel>)
  822. AMax()      -- Maximum non-blank numeric, date or character value in
  823.                specified row or column of an array.
  824.                Usage: AMax(<cArrayskel>)
  825. AMin()      -- Minimum non-blank numeric, date or character value in
  826.                specified row or column of an array.
  827.                Usage: AMin(<cArrayskel>)
  828. AVar()      -- Finds population variance of non-blank numeric or date 
  829.                values in specified row or column of a specified array.
  830.                Usage: AVar(<cArrayskel>)
  831. ASeek()     -- Performs a binary search in any specified ascending-
  832.                sorted row or column of an array.
  833.                Usage: aSeek(<cFindItem>,<aArray>,<nArraySize>)
  834. AShuffle()  -- Performs a shuffle of elements of an array randomly ...
  835.                Usage: aShuffle(<aArray>,<nLength>)
  836. ABubble()--    Performs a bubble sort (slow) on an array. By telling the
  837.                routine the number of passes, you can have it stop at a
  838.                specific point, and obtain some of the highest or lowest
  839.                values, without taking the time to perform a complete 
  840.                sort. To perform a complete sort, pass the same value for
  841.                nPasses as for nLength (number of elements in array) -- 
  842.                if you want a complete sort, however, you may want to 
  843.                take another look at ShellSort() below ... it's faster.
  844.                Usage: aBubble(<aArray>,<nLength>,<nPasses>)
  845. ArrayRows() -- Returns number of rows (elements) in an array.
  846.                Usage: ArrayRows(<aArray>)
  847. ArrayCols() -- Returns number of columns in an array.
  848.                Usage: ArrayCols(<aArray>)
  849. ShellSort() -- Performs a fast sort routine on an array. This array must
  850.                be copied into an array called: aMyArray. 
  851.                Usage: ShellSort(<nNumber>[,<nColumn>])
  852. aPullSort() -- Performs a sort on an array. This array must be copied 
  853.                into an array called: aMyArray. This routine is 
  854.                theoretically faster than the ShellSort() routine above,
  855.                and definitely faster than the aBubble() routine above.
  856.                Usage: aPullSort(<nNumber>)
  857. CmpArray    -- Compares the contents of two arrays.
  858.                Usage: do CmpArray with <Array1>,<Array2>,<ArIndex>
  859. ARec2Arr()  -- Creates a public array, &aRecord.[n], initialized to the
  860.                record format of the currently selected DBF, either blank
  861.                or filled with the values of the current record. 
  862.                NOTE: Update requires a name for the array!
  863.                Usage: ARec2Arr(<ArrayName>,<lBlank>)
  864. StackNew()  -- Creates a stack (using dBASE arrays). This is not quite
  865.                a "true" stack, as it requires an upper limit.
  866.                Usage: StackNew(<cName>,<nSize>)
  867. StackEmpty()-- Checks to see if a stack is empty.
  868.                Usage: StackEmpty(<cName>)
  869. StackFull() -- Checks to see if a stack is full.
  870.                Usage: StackFull(<cName>)
  871. StackPush() -- Adds an element to the top of a stack.
  872.                Usage: StackPush(<cName>,<xElement>)
  873. StackPop()  -- Removes an element from the top of the stack.
  874.                Usage: StackPop(<cName>,<xElement>)
  875. StackTop()  -- Copies top element from a stack, but does not remove it.
  876.                Usage: StackTop(<cName>,<xElement>)
  877. StackDelete -- Releases stack (array) from memory.
  878.                Usage: Do StackDelete with <cName>
  879.  
  880. ------------------------------------------------------------------------
  881. MEASURE.PRG -- Conversion of Measurements
  882. ------------------------------------------------------------------------
  883. Kg2Lb()     -- Used to convert Kilograms to Pounds.
  884.                Usage: Kg2Lb(<nKg>)
  885. Lb2Kg()     -- Used to convert Pounds to Kilograms.
  886.                Usage: Lb2Kg(<nPounds>)
  887. Inch2Cm()   -- Inches to Centimeters.
  888.                Usage: Inch2Cm(<nInches>)
  889. Cm2Inch()   -- Centimeters to Inches.
  890.                Usage: Cm2Inch(<nCm>)
  891. Km2Mile()   -- Kilometers to Miles.
  892.                Usage: Km2Mile(<nKm>)
  893. Mile2Km()   -- Miles to Kilometers.
  894.                Usage: Mile2Km(<nMiles>)
  895. Km2Naut()   -- Kilometers to Nautical miles.
  896.                Usage: Km2Naut(<nKm>)
  897. Naut2Km()   -- Nautical miles to Kilometers.
  898.                Usage: Naut2Km(<nNautMiles>)
  899. Naut2Stat() -- Nautical miles to Statute miles (approximate).
  900.                Usage: Naut2Stat(<nNautMiles>)
  901. Stat2Naut() -- Statute miles to Nautical miles (approximate).
  902.                Usage: Stat2Naut(<nStatMiles>)
  903. Fahr2Cel()  -- Fahrenheit to Celsius.
  904.                Usage: Fahr2Cel(<nFahrTemp>)
  905. Cel2Fahr()  -- Celsius to Fahrenheit.
  906.                Usage: Cel2Fahr(<nCelTemp>)
  907. Gal2Ltr()   -- US Gallons to Liters
  908.                Usage: Gal2Ltr(<nGal>)
  909. Ltr2Gal()   -- Liters to US Gallons
  910.                Usage: Ltr2Gal(<nLiters>)
  911. CuFt2Gal()  -- Cubic feet to US Gallons
  912.                Usage: CuFt2Gal(<nCubicFeet>)
  913. Gal2CuFt()  -- US Gallons to Cubic Feet
  914.                Usage: Gal2CuFt(<nGallons>)
  915.  
  916. ------------------------------------------------------------------------
  917. TRIG.PRG -- Trigonometric Functions
  918. ------------------------------------------------------------------------
  919. Note, all of these have the Usage:  FUNC(<nX>)
  920.  
  921. Secant()    -- Secant of an angle X in radians.
  922. Cosecant()  -- CoSecant of an angle X in radians.
  923. CoTan()     -- CoTangent of an angle X in radians.
  924. ASec()      -- Inverse Secant - angle size in radians.
  925. ACoSec()    -- Inverse Cosecant - angle size in radians.
  926. ACoT()      -- Inverse CoTangent
  927. SinH()      -- Hyperbolic Sine
  928. CosH()      -- Hyperbolic CoSine
  929. TanH()      -- Hyperbolic Tangent
  930. SecH()      -- Hyperbolic Secant
  931. CScH()      -- Hyperbolic CoSecant
  932. CoTH()      -- Hyperbolic CoTangent
  933. ASinH()     -- Inverse Hyperbolic Sine
  934. ACosH()     -- Inverse Hyperbolic CoSine
  935. ATanH()     -- Inverse Hyperbolic Tangent
  936. ASecH()     -- Inverse Hyperbolic Secant
  937. ACscH()     -- Inverse Hyperbolic CoSecant
  938. ACotH()     -- Inverse Hyperbolic Cotangent
  939. Hav()       -- Haversine 
  940. AHav()      -- Inverse Haversine
  941.  
  942. ------------------------------------------------------------------------
  943. NAVIGATE.PRG -- Navigation Routines
  944. ------------------------------------------------------------------------
  945. Correct()   -- Correction of direction - adjusts direction given, in
  946.                degrees, by a second number of degrees.
  947.                Usage: Correct(<nDirection>,<xCorrection>)
  948. UnCorrect() -- Uncorrection of direction - adjusts direction given, as
  949.                above. This is the inverse of Correct().
  950.                Usage: UnCorrect(<nDirection>,<xUnCorr>)
  951. XAngle()    -- Angle in degrees (<=90) at which two vectors in degrees
  952.                intersect.
  953.                Usage: XAngle(<nVector1>,<nVector2>)
  954. LeftWind()  -- Effect of second vector on first.
  955.                Usage: LeftWind(<nCourse>,<nWindFrom>)
  956. TailWind()  -- Is the effect of second vector on first additive?
  957.                Usage: TailWind(<nCourse>,<nWindFrom>)
  958. Heading()   -- Heading required to make good a course.
  959.                Usage: Heading(<nCourse>,<nAirspeed>,<nWindFrom>,;
  960.                               <nForce>)
  961. Course()    -- Course made good given heading, speed, wind dir, and 
  962.                force.
  963.                Usage: Course(<nCourse>,<nAirspeed>,<nWindFrom>,;
  964.                              <nForce>)
  965. GndSpeed()  -- Speed over the ground given heading, etc.
  966.                Usage: GndSpeed(<nCourse>,<nAirspeed>,<nWindFrom>,;
  967.                                <nForce>)
  968. Deg2Num()   -- Degrees to numbers ... converts character description of
  969.                degrees (Degrees Minutes Seconds:  40d50'30.2 N) to 
  970.                numeric value.
  971.                Usage: Deg2Num("<cDms>")
  972. BearsDist() -- Distance to an object at the time of the second bearing.
  973.                Usage: BearsDist(<nBear1>,<nBear2>,<nRun>)
  974. BearsPass() -- Distance at which an object will be when abeam given 2
  975.                bearings.
  976.                Usage: BearsPass(<nBear1>,<nBear2>,<nRun>)
  977. BearsRun()  -- Distance to run until object will be abeam given two
  978.                bearings.
  979.                Usage: BearsRun(<nBear1>,<nBear2>,<nRun>)
  980. GCDist()    -- Great Circle distance between 2 points given latitude and
  981.                long. of each. 
  982.                Usage: GcDist(<cLat1>,<cLon1>,<cLat2>,<cLon2>)
  983. GcCourse()  -- Initial Great Circle course between two points given lat 
  984.                and long of each. (Following a 'Great Circle' requires 
  985.                course changes.
  986.                Usage: GcCourse(<cLat1>,<cLon1>,<cLat2>,<cLon2>)
  987.  
  988. ------------------------------------------------------------------------
  989. STATS.PRG -- Statistical Routines
  990. ------------------------------------------------------------------------
  991. Samplevar() -- Finds sample variance of specified field of the current
  992.                database.
  993.                Usage: SampleVar(<cField>[,<cClause>])
  994. Stny()      -- Returns value of the standard normal distribution 
  995.                function given a number of standard deviations from the 
  996.                mean.
  997.                Usage: Stny(<nDevs>)
  998. StnArea()   -- Area of the standard normal distribution function between
  999.                mean and given number of standard deviations from the 
  1000.                mean.
  1001.                Usage: StnArea(<nDevs>)
  1002. Stnz()      -- Lookup table to find the values of 'z', standard 
  1003.                deviations, corresponding to the most common areas inside 
  1004.                a given number of tails of the normal distribution 
  1005.                function.
  1006.                Usage: Stnz(<nProb>,<nTails>)
  1007. StnDiff()   -- Determines whether hypothesis that sample of a given mean 
  1008.                is different from expected mean is justified.
  1009.                Usage: StnDiff(<nConf>,<nTails>,<nSample>,<nSampMean>,;
  1010.                               <nPopMean>,<nPopStd>)
  1011. StnDevs()   -- Calculates 'z', standard deviations, corresponding to any
  1012.                area of standard normal curve between mean and the 
  1013.                desired z. Much slower than Stnz().
  1014.                Usage: StnDevs(<nArea>)
  1015. TstnArea()  -- Translation function to convert area to left of point 
  1016.                under standard normal curve to 0 for ZeroIn().
  1017.                Usage: TstnArea(<nDevs>,<nArea>)
  1018. ZeroIn()    -- Finds a zero of a continuous function.
  1019.                Usage: ZeroIn(<cFunction>,<fX1>,fX2>,<fAbsError>,;
  1020.                              <nMaxiter>,<n_Flag>)
  1021.  
  1022. ------------------------------------------------------------------------
  1023. FIELDS.PRG -- Field Processing Routines
  1024. ------------------------------------------------------------------------
  1025. MemoPagr()  -- Used to display a memo in a window on screen, allows user
  1026.                to scroll up and down through memo.
  1027.                Usage: MemoPagr("<cMemo>",<nULRow>,<nULCol>,<nBRRow>,;
  1028.                                 <nBRCol>)
  1029. ScanMemo    -- Used to remove hard returns in all memo fields in all 
  1030.                records of a specified database.
  1031.                Usage: Do ScanMemo with "<cDbf>"
  1032. Cut         -- Used to cut to a global memvar CLIPBOARD the contents of 
  1033.                a field or memvar on screen (during a read) -- can then 
  1034.                be used with PASTE.
  1035.                Usage: do Cut with "<cFld>","<cScrType>"
  1036. Copy        -- Used to COPY to a global memvar CLIPBOARD the contents of
  1037.                a field or memvar on screen, so it can be used with 
  1038.                PASTE.
  1039.                Usage: do Copy with "<cFld>"
  1040. Paste       -- Used to paste the contents of CLIPBOARD (global memvar) 
  1041.                to the current field.
  1042.                Usage: do Paste with "<cFld>","<cScrType>"
  1043. Blanker()   -- Used to blank out a numeric field upon input of a valid
  1044.                numeric item. Useful with GETs ...
  1045.                Usage: Blanker()
  1046. GetRange()  -- Get a range for use with "SET KEY" or "SET FILTER" 
  1047.                commands, works with character, numeric, float and date 
  1048.                types.
  1049.                Usage: GetRange(<cTitle>,<xPara1>,<xPara2>,<cPicture>,;
  1050.                                <nStartRow>,<cColor>[,<cStyle>])
  1051. FldWidth()  -- Return the width of a field, without having to load the
  1052.                database structure into a file ...
  1053.                Usage: FldWidth(<nField>)
  1054. FldDec()    -- Returns the decimal position in a numeric field.
  1055.                Usage: FldDec(<nField>)
  1056. PopMemo     -- Displays a memo in a popup/picklist. Can be assigned to
  1057.                a function key.
  1058.                Usage: do PopMemo with <nTop>,<nLeft>,<nBottom>,;
  1059.                                       <nRight>,<cMemoName>
  1060. FldName()   -- Changes the name of a field in specified dbf. Uses
  1061.                low-level file functions.
  1062.                Usage: FldName(<cDBF>,<nField>,<cNewName>)
  1063. IsMatch()   -- Can be used to check for a match of a memvar or field
  1064.                against the current database.
  1065.                Usage: IsMatch(<cAlias>,<xValue>[,<nRecNo>[,<cOrder>]])
  1066.  
  1067. ------------------------------------------------------------------------
  1068. FILES.PRG -- File Handling Routines
  1069. ------------------------------------------------------------------------
  1070. AllTags     -- Used to bring up a popup/picklist of MDX tags ... can be
  1071.                assigned to a function key.
  1072.                Usage: do AllTags with <nULRow>,<nULCol>
  1073. RedoTags    -- Used to deal with "bloated" MDX files. This will delete 
  1074.                old tags and recreate the MDX file, reducing the size of
  1075.                it, and making access faster. 
  1076.                Usage: do RedoTags with "<cDBF>" && note, do not include
  1077.                                                 && ext.
  1078. AutoRedo    -- Used to bring up a picklist of DBF files, so that you (or 
  1079.                the user) can choose which to redo the tags for.
  1080.                Usage: do AutoRedo with <nXTL>,<nYTL>,<nXBR>,<nYBR>,;
  1081.                                        <cColor>)
  1082. PrntTags    -- Used to print a list of tags/expressions to either the
  1083.                printer or a file for a specific database.
  1084.                Usage: do PrntTags with "<cDBF>"
  1085. ListDBFs    -- Used to create a simple database (DBFS.DBF) containing 
  1086.                the names of all databases in the current directory.
  1087.                Usage: do ListDBFs
  1088. ReCompile() -- Recompiles all dBASE source-code files. 
  1089.                Usage: Recompile([<cDir>],[,<cSkel>[,"R"]])
  1090. MakeDbf     -- Makes an empty DBF.
  1091.                Usage: Do MakeDbf with <cFileName>,<aArray>
  1092. MakeDbf2    -- Makes an empty DBF, assumes array aMakeDBF[n,5].
  1093.                Usage: Do MakeDBF with <cDBFpath>,<cStruPath>
  1094. MakeStru()  -- Makes an empty dBASE Structure EXTENDED file and returns 
  1095.                its root name.
  1096.                Usage: MakeStru()
  1097. MakeStru2() -- Makes an empty dBASE Structure EXTENDED file, using dBASE
  1098.                print redirection. User/programmer may specify to save
  1099.                database in directory specified by DBTMP (DOS Environment
  1100.                variable) or in the current directory.
  1101.                Usage: MakeStru2(<lDBTmp>)
  1102. TempName()  -- Returns a name that can be used for a file of given 
  1103.                extension without conflicting with names of existing 
  1104.                files. If extension is 'DBF', assures that no .DBT or 
  1105.                .MDX of that name exists as well.
  1106.                Usage: TempName(<cExtension>,<lDBTmp>)
  1107. FileMove    -- Used to handle data entry/editing, allowing the user to 
  1108.                move through the database by pressing specific keys. See
  1109.                internal docs for more detail.
  1110.                Usage: do FileMove with <nKey>
  1111. Used()      -- Checks to see if a database is currently in use -- 
  1112.                returns a logical.
  1113.                Usage: Used("<cFile>")
  1114. MDXByte()   -- Used to set the MDX Byte in a DBF header ON or OFF.
  1115.                Usage: MDXByte(<cDBFPath>,<cOnOff>)
  1116. aDir()      -- Creates a public array GADIR[n,4] containing directory 
  1117.                information. It is limited to 292 files or less, 
  1118.                depending on the memory available. Requires SEARCH.BIN.
  1119.                Usage: aDir(<cFMask>,<cBINPath>,<cAttr>)
  1120. DBFDir()    -- Creates (or Overwrites) DBDDIR.DBF, and populates it with
  1121.                directory information. Uses the DOS 5.0 DIR command, and
  1122.                requires DOS 5.0. DO NOT ATTEMPT TO USE WITH PREVIOUS
  1123.                VERSIONS OF DOS.
  1124.                Usage: DBFDir(<cPathSkel>,<lHidSys>)
  1125. ParsPath()  -- Extracts and returns the path from a full path file 
  1126.                specification.
  1127.                Usage: ParsPath(<cFullPath>)
  1128. TagPop      -- Brings up a picklist of .MDX Tags for current database, 
  1129.                so user can change sequence data is listed in. Lists 
  1130.                key, whether or not tag has a 'for' clause or is unique, 
  1131.                and gives most (if not all) of expression for the tag.
  1132.                Usage: do TagPop with cColor,cCurTag
  1133. AAppend()   -- Appends a text file into an array. This routine is 
  1134.                limited to text files of 1,170 lines, and 254 characters
  1135.                per line. The text file must be an ASCII .TXT formatted 
  1136.                file. Warning -- if array already exists, it will be 
  1137.                overwritten.
  1138.                Usage: AAppend(<cFileName>,<aArrayName>)
  1139. FDel()      -- Deletes a given portion of a file (text or binary) from 
  1140.                the beginning of the file, end of the file, or current 
  1141.                pointer position. 
  1142.                Usage: FDel(<nHandle>,<nBytes>,<nStart>)
  1143. FGetLine()  -- Extracts a line of text from a text file.
  1144.                Usage: FGetLine(<cFileName>,<cLookup>[,<lCase>[,;
  1145.                           <lEntire>]])
  1146. FIns()      -- Inserts specified number of nulls into a low-level file. 
  1147.                See comments on FDel().
  1148.                Usage: FIns(<nHandle>,<nBytes>,<nStart>)
  1149. GetInfo()   -- Retrieves information from STATUS that you cannot get 
  1150.                with the dBASE IV function SET(). Keywords are:
  1151.                    WORK       Number of work area currently in
  1152.                    PRINT      Current printer destination (PRN, NUL, 
  1153.                        etc.)
  1154.                    ERROR      Error condition set by ON ERROR
  1155.                    ESCAPE     Escape condition set by ON ESCAPE
  1156.                    F2 to F10
  1157.                    Ctrl-F1 to Ctrl-F10
  1158.                    Shift-F1 to Shift-F10
  1159.                              Current setting of each key as set by SET
  1160.                                FUNCTION
  1161.                    PAGE,LINE  Line number specified by ON PAGE AT LINE
  1162.                    HANDLE,<filename>
  1163.                               Handle number of low-level file <filename>
  1164.                    NAME,<filehandle>
  1165.                               Filename of low-level file specified by 
  1166.                                 <filehandle>
  1167.                    MODE,<filehandle>
  1168.                               Privilege of low-level file spec. by
  1169.                               <filehandle>
  1170.                Usage: GetInfo(<cKeyWord>[,<cKeyWord2>])
  1171. TextLine()  -- Returns the number of lines of text in an ASCII Text 
  1172.                file.
  1173.                Usage: TextLine(<cTextFile>)
  1174. TLine()     -- Returns a specific line in an ASCII Text File.
  1175.                Usage: TLine(<cTextFile>,<nLine>)
  1176. TLineNo()   -- Returns the line number of the phrase you are searching 
  1177.                for in an ASCII Text File.
  1178.                Usage: TLineNO(<cTextFile>,<cLookup>[,<lCase])
  1179. TempFile()  -- Returns a random filename in temporary directory.
  1180.                Usage: TempFile([cFileExt])
  1181. TempDir()   -- Returns path of temporary directory as set from DOS 
  1182.                (i.e., SET DBTMP=...).
  1183. DirList()   -- Displays a popup showing all directories on a drive. User
  1184.                may select from list. Returns PATH. Requires TREE command
  1185.                from DOS be in path. Optional parm to change drive ...
  1186.                Usage: DirList([<cDrive>])
  1187. WhatDir     -- Procedure used by DirList() above to extract path from 
  1188.                the bar of the popup selected.
  1189.                Usage: Do WhatDir with <nBar>,<cDir>
  1190. GRAt()      -- Graphic Reverse At() -- returns position of a graphic
  1191.                line-draw character in a string.
  1192.                Usage: GRAt(<cString>)
  1193. FF()        -- FileFind -- brings up a popup of files that match a 
  1194.                skeleton.
  1195.                Will Search complete drive, or a path specified. Uses
  1196.                standard DOS Wildcards (*,?).
  1197.                Usage: FF(<cFile>[,<cPath>])
  1198. MakeStr()   -- Will create an empty structure extended database.
  1199.                Usage: MakeStr(<cFilename.EXT>)
  1200. RecChged()  -- Test field values against memory variables to see if an
  1201.                on-screen display has changed from the disk-record.
  1202.                Usage: RecChged([<cAlias>])
  1203. CopyFile()  -- Copies a database, production .MDX, and .DBT (if these
  1204.                exist). This is faster than COPY TO ...
  1205.                Usage: CopyFile(<cOldFile>,<cNewFile>)
  1206. CopyFil1()  -- Works as above, with open or closed .DBF/.MDX/.DBT files.
  1207.                (Requires SET DBTRAP is set to OFF)
  1208.                Usage: CopyFil1(<cOldFile>,<cNewFile>)
  1209. RenFile()   -- Renames a .DBF/production mdx/.DBT if they exist, and
  1210.                correctly updates the .MDX header.
  1211.                Usage: RenFile(<cOldFile>,<cNewFile>)
  1212. RenFile1()  -- As above, works with open or closed .DBF.
  1213.                Usage: RenFile1(<cOldFile>,<cNewFile>)
  1214. DelFile()   -- Deletes a database, production, and memo (.DBT) in one
  1215.                swell foop. 
  1216.                Usage: DelFile(<cDBFName>)
  1217. DelMDX()    -- Deletes a production index file, correctly updating the
  1218.                file header for the .DBF (avoiding error messages).
  1219.                Usage: DelMdx(<cMdxName>)
  1220. RestMDX()   -- Restore a pointer to an existing .MDX file in the
  1221.                .DBF header. Only really needed if you make a mess using
  1222.                DELMDX() above.
  1223.                Usage: RestMdx(<cMdxName>)
  1224. MdxPoint()  -- Changes the hard-coded .DBF name in an .MDX file header.
  1225.                Usage: MdxPoint(<cDBFName>,<cMdx>)
  1226. DBFName()   -- Strips the 8-character .DBF filename out of the full
  1227.                path returned by the DBF() function. Works on the
  1228.                database in USE in the current workarea.
  1229.                Usage: DBFName()
  1230. MDXGauge()  -- Indexes a database, showing a 'fuel-gauge' style 
  1231.                indicator. SET DBTRAP must be off. Cleans up after itself
  1232.               with routines below.
  1233.                Usage: MDXGauge(<cDataFile>,<cMdxExpr>,<cMdxTag>,;
  1234.                               [<cMdxName>,[<cClr>,[<nURow>,[<nLCol>]]]])
  1235. Gauge()     -- Used to "fill up" the gauge on screen during indexing. 
  1236.                Used with MDXGauge() above.
  1237.                Usage: Gauge()
  1238. DelGauge()  -- Used to delete reference to Gauge() from the .MDX header.
  1239.                Usage: DelGauge(<cMdx>,<cTag>)
  1240. FindTagExp() -- Finds the starting position of a specific index TAG
  1241.                expression within an .MDX header.
  1242.                Usage: FindTagExp(<nHandle>,<cMdxTag>)
  1243. FLocate()   -- Finds a string within a file, starting from the current
  1244.                position of the file pointer. 
  1245.                Usage: FLocate(<nHandle>,<cSearch>,<lWantUpper>)
  1246. FTell()     -- Shorthand way of finding the current position of the file
  1247.                pointer in a file, without moving the pointer.
  1248.                Usage: FTell(<nHandle>)
  1249. FLen()      -- Finds length in bytes of a file and returns the file 
  1250.                pointer to byte 0.
  1251.                Usage: FLen(<nHandle>)
  1252. FReadI32()  -- Converts a 4-byte integer to its decimal value.
  1253.                Usage: FReadI32(<nHandle>)
  1254. MdxGaug2()  -- Version of MDXGAUG (above) that allows cross-directory
  1255.                access of .DBF/.MDX files, and passing of colors.
  1256.                Usage: MdxGaug2(<cDataFile>,<cIndexExp>,<cMTag>,;
  1257.                                <cMdxName>,<cClrBox>,<cClrEmp>,;
  1258.                                <cClrFul>,<nURow>,<nLCol>)
  1259. Gaug2()     -- Version of GAUGE() above, that works with MDXGAUG2().
  1260.                Allows passing of bar colors ...
  1261.                Usage: Gaug2(<cClrFul>,<cClrEmp>)
  1262. NewRec()    -- This routine will recycle records, but requires that
  1263.                deleted records be a) blanked, and b) that PACK is not
  1264.                used to remove them from the file. 
  1265.                Usage: NewRec()
  1266. IsNetDir()  -- Does directory (on the LAN) exist?
  1267.                Usage: IsNetDir(<drive:path>)
  1268. Net_Err     -- Network Error handling, used with IsNetDir() above.
  1269.                Usage: on error do Net_err
  1270.  
  1271. ------------------------------------------------------------------------
  1272. MISC.PRG -- Miscellaneous Routines
  1273. ------------------------------------------------------------------------
  1274. PlayIt()    -- Plays a song based on parameter passed. 1 = Dirge, 
  1275.                2 = "touchdown", programmer may add more as needed ...
  1276.                Usage: PlayIt(<nSong>)
  1277. PageEst     -- Will estimate number of pages in a report, and then ask 
  1278.                if you wish to generate said report ... requires three
  1279.                parameters:
  1280.                nCount = record count (may be 0, in which case procedure 
  1281.                    will try to count the records)
  1282.                cReport = report name, with any FOR condition you wish --
  1283.                          you use a FOR condition, and give a '0' for the
  1284.                          nCount parameter, the procedure will count the
  1285.                          records that match the FOR (only a FOR is setup
  1286.                          at the moment).
  1287.                nRecords = number of records that will print on a page. 
  1288.                           If you send '0', the procedure will calculate
  1289.                           based on 60 records to the page.
  1290.                Usage: do PageEst with <nCount>,"<cReport>",<nRecords>
  1291. Permutes()  -- Permutations of a number of items taken x amount at a 
  1292.                time. 
  1293.                Usage: Permutes(<nNum>,<nHowMany>
  1294. Combos()    -- Combinations, similar to above -- slight difference. See
  1295.                docs.
  1296.                Usage: Combos(<nNum>,<nHowMany>)
  1297. BinLoad()   -- A function used to manage .BIN files.
  1298.                Usage: BinLoad(<cBinName>)
  1299. DialUp()    -- A simple dialer routine. (No longer requires 
  1300.                LOWLEVEL.BIN)
  1301.                Usage: DialUp(<cPhoneNo>)
  1302. CurrPort()  -- Returns the current port being used by the SET PRINT 
  1303.                command. Requires a database (CURRPORT.DBF, one field, 
  1304.                80 characters, called CURRPRT, indexed on said field ...)
  1305.                Usage: CurrPort()
  1306. FileLock()  -- Returns a logical if an attempt to lock a file on a LAN 
  1307.                was successful, displays a message otherwise.
  1308.                Usage: FileLock("<cColor>")
  1309. RecLock()   -- Returns a logical if an attempt to lock a record on a LAN
  1310.                was successful, displays a message otherwise.
  1311.                Usage: RecLock("<cColor>")
  1312. UserID()    -- Returns the userid of the current user on a LAN. Returns 
  1313.                a null string if not on a LAN. ** IF USING dBASE IV, 1.1 
  1314.                or less, requires USERID.BIN **
  1315.                Usage: UserID()
  1316. DosShell    -- Swaps out dBASE from memory, loads a DOS shell.
  1317.                Usage: do DosShell with <cAppName>
  1318. IsDisk()    -- Checks a disk in a disk drive to see if it's valid (door
  1319.                open, unformatted disk, etc.). ** Uses DISK.BIN **
  1320.                Usage: IsDisk("<cDrive>","<cColMess>","<cColErr>")
  1321. IsDisk2()   -- As above, but also checks for write-protection.
  1322.                *** USES ISDISK.BIN ***
  1323.            Usage: IsDisk2(<cDrive>,<cColMess>,<cColErr>)
  1324. BlankIt     -- Used to act like a screen saver for dBASE. Displays a 
  1325.                clock on the screen, waits for user to press <Esc> key.
  1326.                Usage: do BlankIt
  1327.                (suggest: ON KEY LABEL ALT-B DO BlankIt)
  1328. ClockIt     -- Used as part of BlankIt routine.
  1329. Clock       -- Same.
  1330. AuxMsg()    -- Will send output to a secondary monitor, if OX.SYS is 
  1331.                loaded (via CONFIG.SYS).
  1332.                Usage: AuxMsg(<cMsg>,<lLF>)
  1333. GCD()       -- Greatest Common Divisor of two integers. Usually known as
  1334.                Euclid's Algorithm. 
  1335.                Usage: GCD(<n1>,<n2>)
  1336. RandSel()   -- Random Selection of Integers. Note that version 1.1 users
  1337.                will need to make some minor changes to this routine.
  1338.                Usage: RandSel(<nN>,<nT>[,<cArray>[,<lReSeed>]])
  1339. Bell()      -- 'Plays' the bell.
  1340.                Usage: Bell()
  1341. Alarm()     -- As above, but with a "warble".
  1342.                Usage: Alarm([<nRings>][,<nDur>])
  1343. GetPorts()  -- Gets list of available printer ports.
  1344.                Usage: GetPorts()
  1345. PortCheck   -- Used with GetPorts() above. Adds a port to the list
  1346.                of available printer ports.
  1347. E_Check     -- Used with GetPorts() above. Checks for error after
  1348.                testing SET PRINTER TO ...
  1349. IsSet()     -- Checks if a bit (within a byte) is set to 1.
  1350.                Usage: IsSet(<cFlags>,<nWhich>)
  1351.  
  1352. ------------------------------------------------------------------------
  1353. PICKLIST.PRG -- "Generic" Picklist Routines
  1354. ------------------------------------------------------------------------
  1355. Pick1()     -- Ken Holloway's generic picklist routine, allows user 
  1356.                entering first letter of item, tab to another column, 
  1357.                back tab, and so on. Pretty spiffy.
  1358.                Usage: Pick1(<cTitle>,<cDisplay>,<cReturn>,<cKey>,;
  1359.                             <nFromRow>,<nFromCol>,<nToRow>,<nToCol>,;
  1360.                             <cColor1>,<cColor2>)
  1361. Pick2()     -- This picklist routine creates a picklist that determines 
  1362.                it's own location on the screen by calling a couple of 
  1363.                other functions (below) (uses BROWSE command -- Malcom 
  1364.                C. Rubel).
  1365.                Usage: Pick2("<cLookFile>","<cTag>","<cSrchFld>",;
  1366.                        "<cRetFld>",<nScrRow>,<nScrCol>)
  1367. ScrRow()    -- Returns the row position of the current 'Get'. If the 
  1368.                memvar nScrRow already exists, it returns the value in 
  1369.                that memvar.
  1370.                Usage: ScrRow()
  1371. ScrCol()    -- Returns the column position of the current 'Get'. Works 
  1372.                like above, but for column.
  1373.                Usage: ScrCol()
  1374. Pick3       -- Martin Leon's DIYPOP routine. 
  1375.                Usage: do Pick3 with <cFields>,<nULRow>,<nULCol>,;
  1376.                                <nBRRow>,<nBRCol>,<cNormCol>,;
  1377.                                <cFieldCol>,<cBorder>
  1378. Pick4()     -- Keith G. Chuvala's black-box picklist routine. This one's
  1379.                another rather spiffy routine. Includes selection of 
  1380.                file, order and a "set key to" parameter, and ability to
  1381.                return value in the "normal" return manner, or to 
  1382.                keyboard into a field.
  1383.                Usage: Pick4(<nRow>,<nCol>,<cTitle>,<cFileSpecs>,;
  1384.                             <cListWhat>,<nRetChar>,<nReturnType>,;
  1385.                             <cColors>)
  1386. PopList()   -- Used to replace the @M picture clause, use with a VALID
  1387.                REQUIRED clause. Can handle up to 9 parameters.
  1388.                Usage: PopList(<cOpt1>,<cOpt2>,...<cOpt9>)
  1389. Diacrit     -- Used to "keyboard" letters with diacritical marks 
  1390.                directly into a field or memvar on screen, without 
  1391.                requiring you memorize those dreary ASCII Codes. 
  1392.                REQUIRES USE OF LocPop() below.
  1393.                Usage: on key label <keydef> do diacrit [with <cColor>]
  1394. LocPop()    -- Used to set upper left corner coordinates for a popup 
  1395.                based on current "GET", used with WHEN clause of a get.
  1396.                Usage: LocPop(<nWidth>,<nLength>)
  1397.  
  1398. ------------------------------------------------------------------------
  1399. SCA.PRG -- SCA Date Handling Routines
  1400. ------------------------------------------------------------------------
  1401. SCA_Real    -- Special purpose for SCA (Society for Creative 
  1402.                Anachronism), brings up a window, enter date in SCA 
  1403.                dates, converts to "real" dates (dBASE format).
  1404.                Usage: do SCA_Real
  1405. SCA2Real()  -- This function works like SCA_Real, without the user-
  1406.                input.
  1407.                Usage: SCA2Real(<cDay>,<cMonth>,<cYear>) 
  1408.                                         && cyear=Roman Numeral
  1409. Real_SCA()  -- Used to convert 'real' (dBASE format) dates into SCA 
  1410.                dates. (see SCA_Real Procedure above)
  1411.                Usage: Real_SCA(<dDate>)
  1412.  
  1413. ------------------------------------------------------------------------
  1414. FRPG.PRG -- FRPG (Fantasy Role-Playing Games) ROUTINES
  1415. ------------------------------------------------------------------------
  1416. SetRand     -- Procedure used to set a random # table, based on the time
  1417.                it is called, multiplied by the seconds at that moment. 
  1418.                Useful for calling before using any of routines below. 
  1419.                Used ONCE in a dBASE session, should be enough. The 
  1420.                reason for this procedure is that I have found that 
  1421.                using RAND(-1) often returns exactly the same values if 
  1422.                the exact same function call (i.e., Dice() below) is 
  1423.                made several times. This doesn't, therefore, do what I 
  1424.                want. By using the current TIME, I can get a different 
  1425.                random number table each time. 
  1426.                Use EITHER this function OR RAND(-1) during any one 
  1427.                session of dBASE.
  1428.                Usage: Do SetRand
  1429. Dice()      -- Used to simulate the roll of a dice, will handle 
  1430.                different types of dice (for FRPG type games, where 
  1431.                you have 4,6,8,10,12,20,100 sided dice ...)
  1432.                Usage: Dice(<nSides>)
  1433. MultDice()  -- As above but for multiple die (more than one).
  1434.                Usage: MultDice(<nNum>,<nSides>)
  1435. ValiDice()  -- Asks a gamer to enter a valid die roll, GM/Programmer
  1436.                specifies # of dice, number of sides ... (i.e., 3d6 is 3
  1437.                six-sided dice, if GM says: 3,6 the program will ask for 
  1438.                a value from 3 to 18, and not allow any other input).
  1439.                Usage: ValiDice(<nNum>,<nSides>,"<cMessage>","<cColor>")
  1440. DiceChoose()-- Presents three choices (in menu format) for gamer to use,
  1441.                die dice rolls ...
  1442.                Usage: DiceChoose(<nNum>,<nSides>,"<cMessage>",;
  1443.                              "<cColor>")
  1444. ParseDice() -- Used to parse character field/memvar for xdy+z format 
  1445.                of dice (a standard gaming format) and evaluate the 
  1446.                value. I.e., 3d6+1 = 3 six-sided dice, +1 for each die 
  1447.                rolled, giving a range from 6 to 21 -- function will 
  1448.                return random number in that range (actually "rolling" 
  1449.                3 six-sided dice, adding 1 in example). 
  1450.                Usage: ParseDice("<cDiceString>")
  1451. PopDice     -- Used to popup a place the user can enter a quick die 
  1452.                roll, and have the computer do the actual dice rolling. 
  1453.                Handy little routine ...
  1454.                Usage: do PopDice with <cColor>
  1455.                Example: ON KEY LABEL ALT-D DO POPDICE WITH;
  1456.                                             "rg+/rg,w+/n,rg+/rg"
  1457.  
  1458. ------------------------------------------------------------------------
  1459. WINDOWS.PRG -- People are beginning to want things that look like 
  1460. MicroSoft Windows. Here are routines that do some of that. 
  1461. ------------------------------------------------------------------------
  1462. Alert()     -- A popup with an "OK" pad, designed to force the user to
  1463.                acknowledge the message.
  1464.                Usage: Alert("<cTitle>","<cMessage>")
  1465. CheckBox()  -- One line message, with a check box to change the status 
  1466.                of a logical memvar.
  1467.                Usage: CheckBox(<lVar>,"<cTitle>",<nRow>,<nCol>,<nAscii>)
  1468. CheckBx1()  -- Same as above, but is programmed a bit differently.
  1469.                Usage: CheckBx1(<lVar>,"<cTitle>",<nRow>,<nCol>)
  1470. DropDown()  -- Performs a picklist with an array, or a field in a 
  1471.                database. Holds a choice in a holding area, allowing user 
  1472.                to use that, or select something else.
  1473.                Usage: DropDown("<cType>","<cName>",[<nRow,[<nCol>,;
  1474.                                 [<nSize>]]])
  1475. MSWind()    -- Creates a window that acts like a "MS Windows" window, in
  1476.                that you can move it, enlarge it to full screen, and 
  1477.                bring it back to its original size.
  1478.                Usage: MSWind(<nTop>,<nLeft>,<nLower>,<nRight>)
  1479. Enlarge     -- Routine used with MSWIND() above to enlarge the window.
  1480.                Usage: do Enlarge
  1481. MoveWinU    -- Routine used to Move the window (MSWIND()) up on the 
  1482.                screen.
  1483.                Usage: do MoveWinU
  1484. MoveWinD    -- Same as above to move window (MSWIND()) down.
  1485.                Usage: do MoveWinD
  1486. MSWinAct    -- Used to perform action(s) inside the window (MSWIND()).
  1487.                This routine should be modified for each specific system. 
  1488.                This one is just a sample ...
  1489.                Usage: do MSWinAct with <nTop>,<nLeft>
  1490. RadioBut()  -- Radio Button routine.
  1491.                Usage: RadioBut("<cArray>",<nRow>,<nCol>,<nDefPad>,;
  1492.                                 <nAscii>)
  1493. TmpRadio    -- Used to set/reset temporary array aTmpRadio used with
  1494.                RadioBut() routine above.
  1495.                Usage: Do TmpRadio
  1496. ScrolBar()  -- Performs a horizontal scroll-bar to find a record in a
  1497.                database file.
  1498.                Usage: ScrolBar(<nAtLine>)
  1499. MSWind2()   -- Acts like above, but title (due to a ... feature ... of 
  1500.                dBASE IV version 1.5) does not display if enlarged.
  1501.                Usage: MsWind2(<nTop>,<nLeft>,<nLower>,<nRight>,;
  1502.                               "<cColor>","<cTitle>")
  1503. Enlarge2    -- Used with MSWind2() to enlarge to full-screen.
  1504.                Usage: do Enlarge2 with cTitle, cTitlCol
  1505. MoveWind    -- Used with MSWind2() to move the window.
  1506.                Usage: do MoveWin with <pPad>
  1507. MSWinAt2    -- Used to perform an action inside the window from 
  1508.                MSWind2().
  1509.                Usage: do MSWinAt2
  1510. FieldNum()  -- Used to return the number of a given fieldname in the
  1511.                database structure. Works only on an open database.
  1512.                Usage: FieldNum("<cFldName>")
  1513. Alert3()    -- An enhanced version of Alert2() in PROC.PRG
  1514.                Usage: Alert3("<cTitle>","<cMessage>","<cColor>")
  1515. YesNo3()    -- A version of YESNO() that deals with a message of up to 
  1516.                254 characters. 
  1517.                Usage: YesNo3(<lDefault>,<cTitle>,<cMessage>,<cColor>)
  1518.  
  1519. ------------------------------------------------------------------------
  1520. DIALOGS.PRG -- A library of dialog-box routines -- most of these are
  1521. routines from other sections of the library. Many of those will be 
  1522. removed in the next release from their current resting places, as they 
  1523. will reside here. Routines like SHADOW, and the color-handling routines 
  1524. are stored in this file as well.
  1525. ------------------------------------------------------------------------
  1526. Message1()  -- Displays a single-line message, waits for user to press a
  1527.                key before program moves on.
  1528.                Usage: Message1(<nRow>,<nWidth>,"<cColor>","<cText>")
  1529. Message2()  -- Same as above, but displays message in a window (with
  1530.                shadow).
  1531.                Usage: Message2("<cText>","<cColor>")
  1532. Message3()  -- Same as above, but will handle LONG messages, wrapping 
  1533.                inside window.
  1534.                Usage: Message3("<cText>","<cColor>")
  1535. Message4()  -- 2-Line message in a window, pauses for user.
  1536.                Usage: Message4("<cText1>","<cText2>","<cColor>")
  1537. ScrnHead()  -- Used to display a screen header inside a box (with a 
  1538.                shadow).
  1539.                Usage: ScrnHead("<cColor>","<cText>")
  1540. ScrnHead2() -- Based on ScrnHead() above, uses 3-D effects. NOTE: Adds
  1541.                one row to used area of screen (start screens at row 6,
  1542.                not row 5). 
  1543.                Usage: ScrnHead2(<cColor>,<cText>[,<nStyle>])
  1544. ScrnHead3() -- Similar to #2 above, but gives four options for border.
  1545.                For first two options, it is identical as ScrnHead2(),
  1546.                for other two, it is same size as original Scrnhead().
  1547.            (IN PROC.PRG this is SCRNHEAD() )
  1548.                Default color = grey, default style = 1
  1549.                Usage: ScrnHead3(<cColor>,<cText>[,<nStyle>])
  1550. YesNo()     -- Used to ask a "yes/no" type question, allows three lines 
  1551.                of message, and uses menu pads to choose (move cursor, 
  1552.                press <enter>).
  1553.                Usage: YesNo(<lAnswer>,"<cMess1>","<cMess2>","<cMess3>",;
  1554.                             "<cColors>")
  1555. YesNo2()    -- As above, but allows programmer to choose position on 
  1556.                screen.
  1557.                Usage: YesNo2(<lAnswer>,"<cWhere>","<cMess1>",;
  1558.                              "<cMess2>","<cMess3>","<cColors>")
  1559.                    where cWhere may be one of the following:
  1560.                          UL = Upper Left
  1561.                          UC = Upper Center
  1562.                          UR = Upper Right
  1563.                          CL = Center Left
  1564.                          CC = Center Center
  1565.                          CR = Center Right
  1566.                          BL = Bottom Left
  1567.                          BC = Bottom Center
  1568.                          BR = Bottom Right
  1569.                    Anything else will default to CC.
  1570. YesNo3()    -- A version of YESNO() that deals with a message of up to 
  1571.                254 characters. 
  1572.                Usage: YesNo3(<lDefault>,<cTitle>,<cMessage>,<cColor>)
  1573. YesNo4()    -- Based on YesNo2() above, gives 3-D effect.
  1574.                Usage: YesNo4(<lAnswer>,"<cWhere>","<cMess1>",;
  1575.                             "<cMess2>","<cMess3>","<cColors>";
  1576.                             [,<nStyle>])
  1577. YesNo5()    -- Based on YesNo3() in WINDOWS.PRG, will wrap a long 
  1578.                message inside the dialog box. Gives same 3-D effect as 
  1579.                above.
  1580.                Usage: YesNo5(<lAnswer>,<cTitle>,<cMessage>,;
  1581.                              <cColor>[,<nStyle>])
  1582. YesNo6()    -- Based on YesNo3() and YesNo5(), this will allow the
  1583.                programmer to define location, border type, colors, _and_
  1584.                has defaults for all of these (color defaults to steel-
  1585.                grey appearance). ( IN PROC.PRG, this is YESNO() )
  1586.                Usage: YesNo6(<lAnswer>,<cWhere>,<cTitle>,<cMessage>,;
  1587.                              <cColor>,<nStyle>)
  1588. YesNoCan()  -- A dialog box, defaults to 'Yes/No/Cancel', varies in 
  1589.                size, depending on programmer needs, optional row 
  1590.                position. Nice modification of the YESNO() function in 
  1591.                PROC.PRG.
  1592.                Usage: YesNoCan("<cAnswer>","<cMess1>","<cMess2>",;
  1593.                                "<cMess3>","<cPrompt1>","<cPrompt2>",;
  1594.                                "<cPrompt3>",<nTopRow>,"<cColor>";
  1595.                                [,<lConfirm>])
  1596. YNC()       -- Yes/No/Cancel dialog box, much as YesNo() above, but with
  1597.                three buttons. Due to differences, parameter passed and
  1598.                return value are character, rather than logical.
  1599.                Usage: YNC(<cDefault>,<cWhere>,<cTitle>,<cMessage>,;
  1600.                           <cColor>[,<nStyle>])
  1601. Dialog()    -- Routine to provide a 'standard' set of dialog boxes and
  1602.                buttons for all applications. 
  1603.                Usage: Dialog("<cMsg>",<nType>,"<cBorder>",<nDefBut>,;
  1604.                              <lShadow>,"<cWind>","<cButton>")
  1605.                nType is used to describe the dialog box type, options 
  1606.                are:
  1607.                0:      'OK'
  1608.                1: 'OK' 'CANCEL'
  1609.                2: 'ABORT'  'RETRY'  'IGNORE'
  1610.                3: 'YES'  'NO'   'CANCEL'
  1611.                4: 'YES'  'NO'
  1612.                5: 'RETRY'   'CANCEL'
  1613. Dialog2()   -- Similar to above, but also similar to YNC() further 
  1614.                above. Allows the program to give a dialog box with the 
  1615.                following options (below USAGE) line. Defaults to grey, 
  1616.                defaults to center of the screen, border defaults to 3-d 
  1617.                border style1.
  1618.                Usage: Dialog2(<nDefault>,<nType>,<cWhere>,<cTitle>,;
  1619.                               <cMessage>,;
  1620.                               <cColor>[,<nStyle>[,<cButton1>,;
  1621.                               <cButton2>,<cButton3>]])
  1622.                nDefault is the pad to start at
  1623.                nType is used to describe the dialog box type:
  1624.                1: 'OK' 'Cancel'
  1625.                2: 'Abort' 'Retry' 'Ignore'
  1626.                3: 'Retry' 'Cancel'
  1627.                4: User defined, use optional parameters for button text.
  1628.                   Pass two or three button titles to the routine -- if
  1629.                   using three, it's best to keep the text to 6 char or 
  1630.                   less, if two, use up to 10 or so ...
  1631. ErrorMsg()  -- Allows 2 lines of message, first is ** ERROR **, or
  1632.                optionally, ** ERROR # **  where '#' is a number (if 
  1633.                "<cErr>" is empty (""), system uses first option, but 
  1634.                there must be SOMETHING there). 
  1635.                Usage: ErrorMsg(<cErr>,<cMess1>,<cMess2>,<cColors>)
  1636. ErrorMsg2() -- Based on ErrorMsg(), gives 3-D effects (as above).
  1637.                Usage: ErrorMsg(<cError#>,<cMess1>,<cMess2>,<cColor>;
  1638.                                [,<nStyle>])
  1639. ErrorMsg3() -- Three-D border, centers automatically on any size screen,
  1640.                message up to 254 characters, default = grey, border 
  1641.                default to style 1.
  1642.            (IN PROC.PRG this is ERRORMSG() )
  1643.                Usage: ErrorMsg3(<cError#>,<cMess>[,<cColor>[,<nStyle>]])
  1644. Alert()     -- A popup with an "OK" pad, designed to force the user to
  1645.                acknowledge the message.
  1646.                Usage: Alert("<cTitle>","<cMessage>")
  1647. Alert2()    -- Brings up an "Alert" dialog box (similar to Windows).
  1648.                Usage: Alert2("<cTitle>","<cMessage>","<cColor>";
  1649.                              [,"<cBorder>"])
  1650. Alert3()    -- An enhanced version of Alert2() in PROC.PRG
  1651.                Usage: Alert3("<cTitle>","<cMessage>","<cColor>")
  1652. Alert4()    -- An Alert box. Gives same 3-D effect as above.           
  1653.                Usage: Alert4(<cTitle>,<cMessage>,<cColors>[,<nStyle>])
  1654. Alert5()    -- As above, four different 3-D border effects, defaults to
  1655.                grey, defaults to border style 1, handles multiple height
  1656.                screens (EGA43, VGA50 ...), message can be 254 
  1657.                characters.
  1658.            (IN PROC.PRG this is ALERT() )
  1659.                Usage: Alert5(<cTitle>,<cMessage>,<cColors>[,<nStyle>])
  1660. Surround2() -- Based on Surround() (PROC.PRG), centers text at row 
  1661.                automatically, and gives 3-D effects. Adds shadow as 
  1662.                well. 
  1663.                Usage: Surround2(<nRow>,<cColor>,<cText>[,<nStyle>])
  1664. Surround3() -- Based on Surround2(), centers text at nRow 
  1665.                automatically, gives four 3-D border effects and shadow.
  1666.            (IN PROC.PRG this is SURROUND() )
  1667.                Usage: Surround3(<nRow>,<cColor>,<cText>[,<nStyle>])
  1668. Radio()     -- This routine creates a "radio-button" routine. You can 
  1669.                have up to four options. Returns # of item chosen ...
  1670.                Usage: Radio(<nULRow>,<nULCol>,<nChoice>,"<cTxt1>",;
  1671.                             "<cTxt2>", "<cTxt3>","<cTxt4>","<cTitle>",;
  1672.                             "<cColor>")
  1673. CheckBox    -- This routine does a "CheckBox" much like Windows/Mac type
  1674.                software, with up to four options. NOTE -- the items 
  1675.                marked in the format must be a) logical, and b) 
  1676.                fields/memvars.
  1677.                Usage: Do CheckBox with <nULRow>,<nULCol>,<cTitle>,;
  1678.                                   <cColor>,<lChk1>,<cTxt1>;
  1679.                                    [,<lChk2>,<cTxt2>];
  1680.                                    [,<lChk3>,<cTxt3>] ... to 9
  1681. CheckBox2() -- One line message, with a check box to change the status 
  1682.                of a logical memvar.
  1683.                Usage: CheckBox2(<lVar>,"<cTitle>",<nRow>,<nCol>,;
  1684.                                 <nAscii>)
  1685. CheckBx1()  -- Same as above, but is programmed a bit differently.
  1686.                Usage: CheckBx1(<lVar>,"<cTitle>",<nRow>,<nCol>)
  1687. MultiPick   -- Used for a checkbox routine, using a two-column array.
  1688.                REQUIRES: JPMOUSE.BIN,MUSCLICK.BIN,VDCURSOR.BIN
  1689.                Usage: do MultiPick with <cArray>,<nDown>,<nLast>,;
  1690.                                         <nRows>,<nLength>[,<cColors>;
  1691.                                         [,<cCheck>]]
  1692. RadioBut()  -- Radio Button routine.
  1693.                Usage: RadioBut("<cArray>",<nRow>,<nCol>,<nDefPad>,;
  1694.                                <nAscii>)
  1695. TmpRadio    -- Used to set/reset temporary array aTmpRadio used with
  1696.                RadioBut() routine above.
  1697.                Usage: Do TmpRadio
  1698. SMultPick   -- Subroutine of MultiPick -- used to handle a display loop.
  1699.                Usage: doSMultPick
  1700. YesQuit()   -- Subroutine for MultiPick. 
  1701.                Usage: YesQuit()
  1702. YNMouse()   -- Mouseable Yes/No Dialog Box. REQUIRES MUSCLICK.BIN
  1703.                Usage: YnMouse(<cColors>,<cP1>[,<cP2>...][,<lYes>])
  1704. CWnSize()   -- Returns a string of four characters (chr() values) +1 for
  1705.                the coordinates of the current window/screen. 
  1706.                REQUIRES: VDCURSOR.BIN
  1707.                Usage: cWnSize()
  1708. nWBSrch()   -- Subroutine for cWnSize() above.
  1709. CWnDecode() -- Used to return numeric values based on CWNSIZE() above.
  1710.                Usage: cWnDecode(<cWnString>,<cEdge>|<nPos>)
  1711. Bord3D      -- Creates 3-D border in a window with no "border" (i.e., 
  1712.                border NONE). (Used in above three routines) (Styles: 
  1713.                1 = raised, 2 = inset)
  1714.                Usage: Do Bord3D with <nHeight>,<nWidth>,<cColor>,;
  1715.                                      <nStyle>
  1716. Bord3D2     -- Creates 3-D border in an area on screen created with FILL
  1717.                commands. Used in 3-D scrnhead2() and others.
  1718.                Usage: Do Bord3D2 with <nTop>,<nLeft>,<nBottom>,;
  1719.                                       <nRight>,<cColor>,<nStyle>
  1720. Bord3D3     -- Creates 3-D border in a window with no "border" (i.e., 
  1721.                border NONE). (Used in above three routines) (Styles: 1 
  1722.                = raised, 2 = inset) This is the "Single-Line" version of
  1723.                BORD3D found in PROC.PRG.
  1724.                Usage: Do Bord3D3 with <nHeight>,<nWidth>,<cColor>,;
  1725.                                       <nStyle>
  1726. Bord3D4     -- Creates 3-D border in an area on screen created with FILL
  1727.                commands. This is the "Single-Line" version of BORD3D2 
  1728.                found in PROC.PRG. This one is useful for creating 
  1729.                raised or inset areas in a dialog box ...
  1730.                Usage: Do Bord3D4 with <nTop>,<nLeft>,<nBottom>,;
  1731.                                       <nRight>,<cColor>,<nStyle>
  1732. Bord3D5     -- Creates 3-D border, as original and 3, but all four 
  1733.                options are included in this one.
  1734.            (IN PROC.PRG this is BORD3D)
  1735.                Usage: Do Bord3D5 with <nTop>,<nLeft>,<nBottom>,;
  1736.                                       <nRight>,<cColor>,<nStyle>
  1737. Bevel()     -- Creates a border like BORD3d and BORD3d2.
  1738.                Usage: @<row>,<col> say Bevel(<nBottom>,<nRight>)
  1739.  
  1740. ------------------------------------------------------------------------
  1741. ERRLOG.PRG -- A program to hold error-handling routines for dBASE IV.
  1742. ------------------------------------------------------------------------
  1743. ErrorLog    -- This is used to generate an errorlog for the programmer,
  1744.                giving much vital information about the system at the 
  1745.                time a program bombed. It can print the screen to disk 
  1746.                as well as to paper, and can send a Novell Netware 
  1747.                message to the programmer as well. (If you use print 
  1748.                screen to paper or disk, you will require the use of 
  1749.                PRINTSCR.BIN and/or SCREEN.BIN.)
  1750.                Usage: Do ErrorLog with error(),lineno(),program(),
  1751.                                   alias(),memory()[,<lPrntScrn>;
  1752.                                   [,<lScrn2Disk>[,<cNetId>]]])
  1753.  
  1754. ------------------------------------------------------------------------
  1755. HELPROC.PRG -- A program to deal with programmer defined Help. This 
  1756. system requires the use of HELPER.DBF and HELPER.FMT. This is a "black 
  1757. box" routine. Please read the instructions in HELPROC.PRG before 
  1758. attempting use ...
  1759. ------------------------------------------------------------------------
  1760. Helper      -- The actual HELP program, assigned to F1 
  1761.                             (ON KEY LABEL F1 DO HELPER)
  1762. StrSrch     -- Routine to perform a string search in the help 
  1763.                information (HELPER.DBF). Uses HELPER.FMT to display 
  1764.                information on screen.
  1765.  
  1766. ------------------------------------------------------------------------
  1767. LISTFILE.PRG -- A program written to display an ASCII Text File on the
  1768. screen. It uses some of the low-level routines created by Adam Menkes, 
  1769. and a few odd things I threw together (Ken Mayer). It is completely
  1770. self-contained, and may be copied to any directory and used ... file 
  1771. size read in may vary -- when using versions < 2.0 of dBASE IV, the 
  1772. max number of lines that can be read in is about 1170. In 2.0 and 
  1773. greater, the real limit is the diskspace you have available, but the 
  1774. practical limit is around 5000 lines ... you can change this if you 
  1775. want to. You can do a search for text in this as well ...
  1776.   USAGE: Do ListFile with <cFileName>,<nRow>,<nHeight>[,<nTabs>;
  1777.                           [,<cColors>]]
  1778. ------------------------------------------------------------------------
  1779.  
  1780. ------------------------------------------------------------------------
  1781. OBSOLETE.PRG -- These are functions that, due to the advent of dBASE IV,
  1782. 1.5 (or later versions), or other reasons, are no longer necessary. 
  1783. However, if you are a user of 1.1, and/or wish to still use these 
  1784. functions, they are still available, but with little support.
  1785. ------------------------------------------------------------------------
  1786. Empty()     -- Returns a logical (.t. or .f.) if a field or memvar is 
  1787.                empty. In release 1.5 this is replaced with the internal 
  1788.                function ISBLANK().
  1789.                Usage: Empty(<cField>)
  1790.                Recommendation: If creating a system that uses both 
  1791.                dBASE IV versions 1.5 and earlier versions, rename this 
  1792.                function to ISBLANK(). If the system is an earlier 
  1793.                version of dBASE, this function will be used, and if 1.5
  1794.                or later, the internal function will be used.
  1795. NumFlds()   -- Counts the fields in a given database. This is replaced 
  1796.                in version 1.5 of dBASE IV with FLDCOUNT().
  1797.                Usage: NumFlds(<cDBF>)
  1798. DateSet()   -- Returns a string giving name of current DATE format.
  1799.                Usage: DateSet()
  1800. StampVal()  -- Evaluates a 16-character string in the form of the 
  1801.                rightmost 16 characters returned by the DOS DIR command 
  1802.                for a file. 
  1803.                Usage: StampVal(<cTimeStamp>)
  1804. FullWin     -- Handy to overlay a screen with a full-screen window ...
  1805.                However, by using SAVE SCREEN and then clearing the
  1806.                screen, you can restore to the original with RESTORE 
  1807.                SCREEN, making this routine a bit useless.
  1808.                Usage: do FullWin with "<cColor>","<cWinName>",;
  1809.                                  "<cScreen>"
  1810. SetColor    -- used to set a memory file with colors, or load colors 
  1811.                into memory variables from a memory file.
  1812.                Usage: do SetColor
  1813. SetColor2   -- used to set a mem file as above, but asks for a parameter
  1814.                to be sent, so that when designing a system, you can ask 
  1815.                the user if their monitor is color or mono ... you pass 
  1816.                "Y" or "N" ... i.e.,
  1817.                Usage: do SetColor2 with "<cYN>"
  1818. ExtrClr()   -- Used to extract the first parameter of a color memory
  1819.                variable.
  1820.                Usage: ExtrClr(<cColorVar>)
  1821. InvClr()    -- Can invert the colors of a color memory variable.
  1822.                Usage: InvClr(<cColorVar>)
  1823. RAt()       -- Reverse AT() - returns position of a character string in 
  1824.                its last position in a larger string ... Replaced in 
  1825.                Version 2.0 with internal function: RAt().
  1826.                Usage: RAt(<cFindStr>,<cBigStr>)
  1827. IsMouse()   -- Looks at system for a mouse driver, if there, it turns 
  1828.                off the mouse. Uses JPMOUSE.BIN. Replaced in Version 2.0
  1829.                with the internal function: ISMOUSE().
  1830.                Usage: IsMouse()
  1831. SetMouse    -- Used to toggle a mouse, requires JPMOUSE.BIN and a public
  1832.                memvar c_Mouse set to the most current state ("OFF" means
  1833.                the mouse is "OFF" ... and will be toggled ON in the next
  1834.                call to SetMouse). Replaced in Version 2.0 with SET MOUSE
  1835.                ON|OFF.
  1836.                Usage: On Key label ... DO SetMouse
  1837. IsUnique()  -- Used to check a keyfield in a database to see if it's 
  1838.                unique.
  1839.                NOTE: do not use in dBASE IV, versions > 1.1
  1840.                Usage: IsUnique(<xValue>,<cOrder>)
  1841. DateSet()   -- Returns string giving name of current DATE format.
  1842.                Not needed in 1.5 or later.
  1843.                Usage: DateSet()
  1844.  
  1845. ------------------------------------------------------------------------
  1846. -- EoF: INDEX.TXT
  1847. ------------------------------------------------------------------------
  1848.